ATmega48 sourcear max 5mA. Trasig?
ATmega48 sourcear max 5mA. Trasig?
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
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
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

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
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.
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.
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...
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...
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?
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?
Tack cykze, det där var ett trevligt läge.
hfuse = 0xdf
Min kod är:
Mvh
speakman
hfuse = 0xdf
Min kod är:
Kod: Markera allt
DDRB = 0xFF;
PORTB = 0x00;
for(;;) {
}

Mvh
speakman