Sida 1 av 2
ATmega48 sourcear max 5mA. Trasig?
Postat: 10 november 2005, 11:02:41
av speakman
Har gjort en liten enkel koppling med en ATmega48.
Bara för att komma igång med grunden kopplade jag in en LED i serie med ett 400ohms motstånd.
Upptäckte att den betedde konstigt, så jag skrev helt enkelt så LED:en tändes innan en evigshetsloop. Ingen annan kod förrutom att jag sätter PORTB till output.
Det visar sig att när lysdioden lyser mer än 0,5 sekunder så resetas AVR:en
Lade till wdt_disable(), men ingen förbättring...
Efter ett par timmas felsökande bytte jag ut seriemotståndet till ett 1kohm, och då resettar inte UC'n.
Efter en koll i databladet, så finner jag att den ska klara upp till 40mA per I/O-pinne. Och det enda som är inkopplat är en lysdiod med 12,5mA drivning.
Har ingen fler AVR hemma just nu så jag kan prova, men kan det verkligen vara något fel på den, eller är det något jag gör markant fel?
Har testat både drivit LED:en, och sourceat LED:en. Samma fenomen oavsett.
Mvh
speakman
Postat: 10 november 2005, 11:07:15
av PaNiC
Kan det vara så att Atmel har lyckats producera en hel batch med Mega48 som är kassa? Jag har två här som också beter sig jävligt lustigt.
Postat: 10 november 2005, 11:15:14
av speakman
Typiskt min tur isf!
Mvh
speakman
Postat: 10 november 2005, 22:53:23
av exile
Atmega48 har fuse bit för watchdog timmern....
"Possible Hardware fuse Watchdog always on (WDTON) for fail-safe mode"
står de i databladet på sidan 49

hoppas att det är till någon hjälp..
Postat: 11 november 2005, 00:40:34
av speakman
Har provat exempelkoden strax under för att disabla WDT trots fusen, men det hjälper inte.
Borde verkligen watchdogen agera olika beroende på lasten på I/O-pinnarna?
Mvh
speakman
Postat: 11 november 2005, 01:02:15
av speakman
Har nu provat exakt samma kod i en ATtiny2313 och det funkar kanon med ett 270 ohms seriemotstånd.
Mycket mysko med 48:an!
Mvh
speakman
Postat: 11 november 2005, 11:20:51
av cykze
ISP-pinnarna SCK, MISO och MOSI ligger på PORTB. Troligtvis har du satt någon av dessa till utgångar och har en programmerare utan tri-state-stöd inkopplad till dessa när du kör programmet. Kanske?
Postat: 11 november 2005, 11:32:40
av speakman
Njae, kör ju fyrmotståndsprogrammeraremodellen (PUST!).

Minns inte vilkan resistans det var (kan inte kolla nu), men tror det var 220ohm?
Borde det verkligen dra sån ström ändå?
Men jag är ganska säker på att jag även lyfte bort programmeraren vid felsökningen.
Men Tiny:n har jag programmeraren kvar på, och den funkar...

Vilken state har PORTB by default? Har ju som ingen kod som sätter något läge på dom...
Mvh
speakman
Postat: 11 november 2005, 12:05:21
av exile
speakman skrev:Har provat exempelkoden strax under för att disabla WDT trots fusen, men det hjälper inte.
Borde verkligen watchdogen agera olika beroende på lasten på I/O-pinnarna?
Mvh
speakman
wdt_disable() funkar inte om man har fuse biten satt, testa istället att wdt_reset() i loopen....
Postat: 11 november 2005, 12:15:23
av speakman
Jag uppfattade som att exempelkoden i databladet "overrides" (ursäkta) fuse-biten? Är du säker på att den inte gör det?
Mvh
speakman
Postat: 11 november 2005, 12:16:25
av cykze
speakman: Rör inte Watchdogen så rör inte den dig. Har du inte ändrat någon fusebit som gäller för Watchdogen eller aktivt aktiverat watchdogen i din kod så kan du helt strunta i den.
Jag kör tills vidare också med motståndsprogrammeraren och råkade någon gång sätta ISP-pinnarna höga vilket resulterade i att lysdioderna på PortB knappt lyste. Det blir en "krock" när utgångarna på AVR:en kopplas till utgångarna på parallellporten.
Alla portar är högohmiga ingångar som default. Sätt bitarna i DDRn (t ex DDRB) för att sätta motsvarande pinne som utgång. Ändra sedan i PORTn (t ex PORTB) för att växla mellan hög och låg för utgången.
Postat: 11 november 2005, 12:49:26
av exile
speakman: Nä inte om man har fuse biten satt och det är vitsen med fuse biten vad än mjukvaran gör så kan den inte stänga av WDT utan endast resetar den...
Värt att notera är att den här funktion endast finns på nyare Atmegor som ex Atmega48...
Det behöver inte vara WDT som spökar men jag tycker att det är värt att testa...
Postat: 11 november 2005, 13:09:40
av speakman
Ärligt talat kommer jag inte riktigt överens med avrdude än. Den är kasst dokumenterad, så jag har inte fått till att läsa/skriva fusen-bitarna än.
Ska se hur det är ställt när jag väl får till det. Ska testa vidare ikväll.
Mvh
speakman
Postat: 11 november 2005, 18:15:52
av cykze
Lägg på växeln "-t" för att gå in i "interactive mode". Ex. "avrdude -c bsd -p m48 -t"
Sen kan du köra read hfuse för att läsa Fuse High byte. Sen write hfuse 0 0xdf för att skriva 0xDF till fusen. Lite krångligt.
Men har du inte ändrat några fuse-inställningar tidigare så ska du inte göra det nu heller, innan du har fått AVR:en att fungera som den ska.
Kan du posta din kod?
Postat: 11 november 2005, 22:50:50
av speakman
Tack cykze, det där var ett trevligt läge.
hfuse = 0xdf
Min kod är:
Mvh
speakman