*oh*
2007-01-04 by Thomas Keller
Yahoo Groups archive
Index last updated: 2026-04-28 22:41 UTC
Thread
2007-01-04 by Thomas Keller
OK. I figured out wqhat up/downloading memory was in AVR Studio. Now, I can see my EEPROM data when I do a memory watch. It still isn't coming in to my data resgister when I read it, though )-:.
2007-01-04 by David VanHorn
On 1/3/07, Thomas Keller <tjkeller1@alltel.net> wrote: > > > OK. I figured out wqhat up/downloading memory was in AVR Studio. Now, > I can see my EEPROM data when I do a memory watch. It still isn't > coming in to my data resgister when I read it, though )-:. Step it through, and see what it IS loading. Check EEARL and EEARH just before the load. [Non-text portions of this message have been removed]
2007-01-04 by John Samperi
I have taken the liberty to rearrange your code to my
liking :) this will fetch the last data byte correctly.
Also watch out your use of r16 as it is also defined as temp.
.include "tn25def.inc"
; Define here the variables
;
.def temp =r16
.cseg
; Define here Reset and interrupt vectors, if any
;
RESET:
rjmp START
reti ; Addr $01
reti ; Addr $02
reti ; Addr $03
reti ; Addr $04
reti ; Addr $05
reti ; Addr $06 Use 'rjmp myVector'
reti ; Addr $07 to define a interrupt vector
reti ; Addr $08
reti ; Addr $09
reti ; Addr $0A
reti ; Addr $0B This is just an example
reti ; Addr $0C Not all MCUs have the same
reti ; Addr $0D number of interrupt vectors
reti ; Addr $0E
reti ; Addr $0F
reti ; Addr $10
; Program starts here after Reset
START:
ldi r30, RAMEND ; initialize stack pointer
out SPL, r30
;****************
; ldi r31, 0x00 ; set up EEPROM high byte address
; out EEARH, r31 Not used in tiny 45 ; store in register
;****************
ldi r31, 0x00 ; set up upper WGM bytes
out WGM01, r31 ; and once again
ldi r31, 0x03 ; set upo to set
waveform configuration
out WGM00, r31 ; output to
appropriate control register
;
; set up timer delay for ~~.01 second
;
; counter clock will be prescaled by 1024 to make the .01 second
count easier
;
ldi r31, 0x38 ; load low byte of delay count
out TCNT0, r31 ; output to counter/timer 0-
ldi r31, 0xe5 ; load the control value
for TCCR1
; CTC1 set, PWMa set, COM1A set to
; toggle on match, timer clock set
; for system clock divided by 256
out TCCR1, r31 ` ; store in register
ldi r31, 0x01 ; load value for TCCR01A
out TCCR0A, r31 ; and strope to TCCR01A
ldi r31, 0x04 ; load value for TTCCR01B
out TCCR0B, r31 ; output to TCCR01B
ldi r31, 0x00 ; load compre output macthj value
out OCR0A, r31 ; stroe in output
compare register 0A
;
; this code sets the default initial table adress at -1. It
will automatically
; increment on the first access, to 0
;
ldi r16,table_end ;****** 0xff ;first addresss - 1 in EEPROM
table data
ldi r17, 0x00 ; direction control byte, 0 = up
rcall TABLEDATA
rjmp DONE ; all done, leave
;
; this subroutine counts up and down through the data table in the EEPROM
; data, reading all 100 data values, from bottom to top, then
top to bottom
; one at a time
;
NEXT:
ldi r30, 0x00 ; compare value
cp r17, r30 ; check direction bit for value
brne UP ; it's set for an up count
ldi r30, 0x00 ; compare value
dec r16 ; count the table
pointer down one
cp r16, r30 ; at the bottom yet?
ldi r17, 0xff ; set direction flag to count up
RJMP QUIT0 ; all done, depart
UP:
ldi r30, 0x63 ; compare value
inc r16 ; increment table pointer
cp r16, r30 ; 99 decimal, end of table
breq FIXIT0 ; deal with table overflow
rjmp QUIT0 ; all done, depart
FIXIT0:
ldi r17, 0x00 ; reset direction flag
for down count
QUIT0:
ret ; return from subrouttine call
;
; read a value from the EEPROM table
;
TABLEDATA:
rcall NEXT ; go grab next tabel address
out EEARL,r16 ;Sets up address in EEP
sbi EECR,EERE ;************* this is missing in your code
in r0,EEDR ;Get data
ret ; all done, go home
DONE:
rjmp DONE
; this table povides the data for the intensity curve needed for
; xxxxxxxxxxxxxxx. the data represent the value sin^3 * 255 for
; each angle from 0 through 90 at .9 degree increments
.eseg
TABLE:
.db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 3, 3, 4, 5, 6, 6
.db 8, 9, 10, 11, 13, 14, 16, 18, 20, 22, 24, 26, 29, 31, 34, 36
.db 39, 44, 48, 52, 55, 59, 62, 66, 70, 74, 78, 82, 86, 90, 94, 99
.db 103, 108, 112, 117, 121, 126, 130, 135, 140, 144, 149, 153
.db 158, 163, 167, 172, 176, 180, 185, 189, 193, 197, 201, 205
.db 209, 212, 216, 219, 223, 226, 229, 232, 234, 237, 239, 242
.db 344, 346, 247, 249, 250, 252, 253, 254, 255, 255, 255
table_end:
Regards
John Samperi
********************************************************
Ampertronics Pty. Ltd.
11 Brokenwood Place Baulkham Hills, NSW 2153 AUSTRALIA
Tel. (02) 9674-6495 Fax (02) 9674-8745
Email: john@ampertronics.com.au
Website http://www.ampertronics.com.au
*Electronic Design * Custom Products * Contract Assembly
********************************************************2007-01-04 by Thomas Keller
Dave, that's the point. it doesn';t appear to be laoding ANYTHING. I can use thw memory watch to look at the EEPROM contents, and they are correct (now that I know about "downloading" the eep file). Buty according to the debugger, NOTHING is appearing in either EEDR *OR* the register into which I am loading the EEDR contents. Always 0x00, regardless of what is in the EEPROM location being addressed by r16 (which is being copied into the EEADRL register, and is showing up there correctly). David VanHorn wrote:
> > On 1/3/07, Thomas Keller <tjkeller1@alltel.net > <mailto:tjkeller1%40alltel.net>> wrote: > > > > > > OK. I figured out wqhat up/downloading memory was in AVR Studio. Now, > > I can see my EEPROM data when I do a memory watch. It still isn't > > coming in to my data resgister when I read it, though )-:. > > Step it through, and see what it IS loading. > Check EEARL and EEARH just before the load. > >
2007-01-04 by Thomas Keller
Thanks John! That sbi instruction was the culprit. I misunderstood, and thought that was only necessary if one was worried about the 4 clock cycle delay in reading EEPROM. *sigh* tom John Samperi wrote:
> > I have taken the liberty to rearrange your code to my > liking :) this will fetch the last data byte correctly. > Also watch out your use of r16 as it is also defined as temp. > > > rcall NEXT ; go grab next tabel address > out EEARL,r16 ;Sets up address in EEP > sbi EECR,EERE ;************* this is missing in your code > i >
2007-01-04 by David VanHorn
On 1/4/07, Thomas Keller <tjkeller1@alltel.net> wrote: > > Dave, that's the point. it doesn';t appear to be laoding ANYTHING. I > can use thw memory watch to look at the EEPROM contents, and they are > correct (now that I know about "downloading" the eep file). Buty > according to the debugger, NOTHING is appearing in either EEDR *OR* the > register into which I am loading the EEDR contents. Always 0x00, > regardless of what is in the EEPROM location being addressed by r16 > (which is being copied into the EEADRL register, and is showing up there > correctly). And I think you just found out why :) [Non-text portions of this message have been removed]