Mr. Poef
High density LED's... wat gaan ze nog allemaal uitvinden??
Ik heb een prog geschreven om 16 ingangen in te lezen met een 16-1 MUX. Als ik deze software simuleer in AVR Studio 4.12 SP4 build 498, dan gaat het allemaal goed.
Maar, als ik deze in de tiny stop, dan gaat het fout als portB1 hoog is (adres A1 van de MUX). Andere tiny en MUX verhielpen dit probleem niet.
Als 1 van de 16 knoppen wordt ingedrukt, dan wordt er 5 maal data verzonden met een delay van 100ms en daarna met een delay van 10ms. Ergens in deze delayroutine gaat het fout.
een stukje code:
;***** Timer overflow *****
TIM0_OVF:
inc temp
cp temp, dly
breq short_bit
reti
short_bit: lds tempH, status
cbr tempH, (1<<timer_status)
sts status, tempH
retiWaarom gaat het goed zolang PB1 laag is? Op verzoek mail ik wel de hele code.
De MUX is een MAX306 met hier de datasheet.
Moet je die timer niet re-loaden als-ie overflowed?
Wat het niet-functioneren met die ene bit te maken heeft?? Linkje naar een schemaatje?
Overigens mis ik nog even het verband tussen mux, knop (die zal wel aan een mux input hangen) en data verzenden...
Mr. Poef
High density LED's... wat gaan ze nog allemaal uitvinden??
Op 12 december 2006 06:27:22 schreef Marco69:
Overigens mis ik nog even het verband tussen mux, knop (die zal wel aan een mux input hangen) en data verzenden...
Juist, het was al een beetje laat gisteren. Het is een remote device, vandaar de data verzenden.
De timer loopt gewoon tot max en begint dan opnieuw te tellen.
Nog wat anders... Loop je niet te rommelen met interrupts? Die pin is ook een interrupt ingang. Als die aan staat... level triggered... nou ja, je voelt 'm al aankomen...
Mr. Poef
High density LED's... wat gaan ze nog allemaal uitvinden??
Ik gebruik 2 interrupts, de "reset" en de TIM0_OVF, dus daar kan het niet aan liggen. initialisatie:
;***** initialise Stack-Pointer
ldi Temp,low(RAMEND)
out SPL,Temp
;***** initialise port B
ldi tempL, 0b00101111 ;Set Port B
out DDRB,TempL
sbi portB, TxD
;****************************************************************************
;***** CLEAR RAM TABLES *****
;****************************************************************************
;=== clear all tables
ldi ZL,low(STATUS) ;Z-pointer in beginning of
ldi ZH,high(STATUS) ; STATUS table
clr Temp ;Clear register Temp
CL_TBL: st Z+,Temp ;write $00 in every byte and inc Z-pointer
cpi ZH,high(T_END) ;check for end of table, HIGH byte
brne CL_TBL ;if end not reached, clear next byte
cpi ZL,low(T_END) ;check for end of table, LOW byte
brne CL_TBL ;if end not reached, clear next byte
;***** INITIALISE TIMER0 & ENABLE ITS INTERRUPT
ldi Temp,$02
out TIMSK0,Temp ;enable timer0 interrupt
sei ;enable global interrupt
een schema:
ATTINY13 MUX
_____________ ___________
| PB0|-------|A0 |-
| PB1|-------|A1 |-
| PB2|-------|A2 |-
| PB3|-------|A3 |- Data Inputs (de drukknoppen)
| | | |-
| PB4|-------|MUX-OUT |-
| | |__________|-
| |
| PB5|---->TX
|_____________|
Er zijn ook nog de nodige weerstanden voorzien!!
Ook nog een aardige... In je interrupt handler bewaar je geen SREG, terwijl je wel aan flags loopt te trekken in die handler. Dat kan hele onvoorspelbare resultaten tot gevolg hebben.
(post anders de hele code of een link ernaar.. praat wat makkelijker).
Mr. Poef
High density LED's... wat gaan ze nog allemaal uitvinden??
Ik zal straks een linkje posten, en dat van die SREG had ik bewust niet gedaan omdat er (in de simulatie) geen veranderingen optreden in dat register en dat in de eerste versie mijn TINY voor 94% volzat met code (nu nog maar een goede 60%).
Maar toch een tip om straks eens uit te proberen.
Hun? Geen veranderingen? Je staat nondeju een cp in de ISR te doen. En ja, als die flag al de status heeft die de cp ook creert, maakt het voor die flag dus niet uit. Duh. En als de ISR een keer tussen een paar instructies elders aangeroepen wordt... weet je het niet...
Als ik een collega dergelijke code zie bakken en het dan met een dergelijk excuus hoorde verdedigen, mag-ie wat mij betreft gaan bloemschikken ofzo... Maar geen byte code meer van die man!
Mr. Poef
High density LED's... wat gaan ze nog allemaal uitvinden??
|:(|:(|:(|:(|:(|:(|:(
Natuurlijk moet dat erbij, ik "zag" cpi, maar daarmee is het probleem niet verholpen. Ik heb je de asm file gemaild omdat uploaden even niet gaat.
Mr. Poef
High density LED's... wat gaan ze nog allemaal uitvinden??
Marco69, bedankt voor je uitleg in de mail, een paar aanpassingen later werkte het.
Natuurlijk vraag ik me stiekem toch nog af waar het eigenlijk mis ging
.