Berry14
There are just two moments: now and forever.
Hoi allemaal,
Ik ben net (vandaag) begonnen met AVR's. Ik heb een programma van internet gehaald voor op de AVR, hiermee ging de LED netjes knipperen. Ik heb de code daarna wat aangepast zodat twee LED's 3 om 3 keer gaan knipperen (het echte politielicht dus
). Het werkt wel, maar ze lijken wel opeens sneller en zwakker te knipperen, dus volgens mij heb ik iets niet goed gedaan. Kan ik wel rechtstreeks een LED op de uitgang aansluiten?
Dit is de code van internet:
.include "tn13def.inc"
.def mp = r16
.def t1 = r17
.def t2 = r18
.def temp = r19
rjmp main
delay:
clr t1
clr t2
ldi temp, 100
delaywalk:
;dec T2 ;
;brne delaywalk ; uncomment these for longer delay
dec T1 ; 256 x 100 x 3 = 76800 cycles
brne delaywalk ; standard ATtiny13 clock is 9.6Mhz
dec temp ; 9.6Mhz/8 (divider) = 1.2Mhz a cycle
brne delaywalk ; total delay time = +/- 64 ms (with temp on 100)
ret ; go back to where you came from
main:
ldi mp,0b00001000 ; PB3
out DDRB,mp
loop:
LDI mp,0x00
OUT PORTB,mp
rcall delay
LDI mp,0xFF
OUT PORTB,mp
rcall delay
rjmp loopEn dit is de door mij aangepaste versie:
/*
* Politie_licht.asm
*
* Created: 16-5-2011 21:16:30
* Author: Berry
*/
.include "tn13def.inc"
.def mp = r16
.def t1 = r17
.def t2 = r18
.def temp = r19
rjmp loop
delay:
clr t1
clr t2
ldi temp, 100
delaywalk:
;dec T2 ;
;brne delaywalk ; uncomment these for longer delay
dec T1 ; 256 x 100 x 3 = 76800 cycles
brne delaywalk ; standard ATtiny13 clock is 9.6Mhz
dec temp ; 9.6Mhz/8 (divider) = 1.2Mhz a cycle
brne delaywalk ; total delay time = +/- 64 ms (with temp on 100)
ret ; go back to where you came from
loop:
;LAMP1
LDI mp,0b00000000
OUT PORTB,mp
rcall delay
LDI mp,0b00001000
OUT PORTB,mp
rcall delay
LDI mp,0b00000000
OUT PORTB,mp
rcall delay
LDI mp,0b00001000
OUT PORTB,mp
rcall delay
LDI mp,0b00000000
OUT PORTB,mp
rcall delay
LDI mp,0b00001000
OUT PORTB,mp
rcall delay
;LAMP2
LDI mp,0b00000000
OUT PORTB,mp
rcall delay
LDI mp,0b00010000
OUT PORTB,mp
rcall delay
LDI mp,0b00000000
OUT PORTB,mp
rcall delay
LDI mp,0b00010000
OUT PORTB,mp
rcall delay
LDI mp,0b00000000
OUT PORTB,mp
rcall delay
LDI mp,0b00010000
OUT PORTB,mp
rcall delay
rjmp loop
Zien jullie wat ik fout doe, of hebben jullie misschien een betere en kortere code (en graag uitleg)?
Groetjes,
Berry
kloppertje
Diverse projecten en experimenten: www.elexperiment.nl
Een led moet je niet rechtstreeks op de uitgang aansluiten, maar altijd met een voorschakelweerstand. Voor het berekenen van de voorschakelweerstand zijn er veel programma's te vinden d.m.v. google. Een weerstand van 1K is wel een makkelijke waarde voor het testen van een ledje.
Berry14
There are just two moments: now and forever.
Is dat om de AVR te beschermen of de LED? De LED maakt me niet zo veel uit namelijk 
[Bericht gewijzigd door Henry S. op (69%)]
hadv
Just find out what you like and let it kill you
In eerste instantie de LED. Maar je weet maar nooit wat er nog meer fout gaat als die doorfikt. Verder, wat heb je er aan als je elke keer een LED moet vervangen?
Berry14
There are just two moments: now and forever.
Niks natuurlijk, maar hij bleef het gewoon doen zonder weerstand. Maar dat is eigenlijk het probleem niet, het gaat me meer om het script
. Ik weet niet hoeveel spanning er op de uitgang komt? Het is namelijk niet te meten als hij steeds aan en uit gaat.
Edit:
Het script lukt nu wel, maar de uitgangen van de AVR zijn zonder LED 5V en met led maar 1,6 ongeveer. Dus de LED is heel zwak, en met een 1k nog zwakker. Hoe kan dat?
[Bericht gewijzigd door Henry S. op (23%)]
noone
483726095 / Een foto zegt meer dan 1000 woorden.
Een AVR kan 40mA leveren op een uitgang en iets van 200mA totaal; dit geldt voor alle AVR's. Een LED kan afhankelijk van het type continu ongeveer 25mA hebben, daarboven gaat hij kapot. Meestal gaat hij dan eerst minder fel branden. Kijk even naar dit schema als voorbeeld : http://www.meeps.nl/mini-projecten/8-miniproject-lightbar
Berry14
There are just two moments: now and forever.
Ik heb de fout al ontdekt:
Ik heb geen output van de poorten gemaakt met DDRB. Nu wel, het werkt super 
Op 16 mei 2011 23:18:58 schreef djoveld:
Een AVR kan 40mA leveren op een uitgang en iets van 200mA totaal; dit geldt voor alle AVR's. Een LED kan afhankelijk van het type continu ongeveer 25mA hebben, daarboven gaat hij kapot. Meestal gaat hij dan eerst minder fel branden. Kijk even naar dit schema als voorbeeld : http://www.meeps.nl/mini-projecten/8-miniproject-lightbar
Dat is wel handig om te weten voor ik hem opblaas 
Bij deze is het dus opgelost 
Toch bedankt iedereen.
rew
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Formeel gaat zowel de led als de AVR buiten specs als je er niks tussen zet. Met een weerstand er tussen gaat het vaak meteen goed. Een enkele normale led kan je dan prima met een AVR output laten branden.
AVR outputs hebben een weerstand van ongeveer 25 ohm. Dus is je voeding 5V, trek je 40mA, is de spanningsval 40mA * 25 ohm = 1V. De spanning op de uitgang wordt dan dus 4V.... Of Atmel toestaat dat je 40mA trekt of dat ze zeggen dat de limiet minder is weet ik niet. Maar het werkt wel. Hoe lang doet atmel geen uitspraak over. Beter maar niet proberen....