Sida 1 av 1
*LÖST* Nybörjar-problem med ATTINY26, STK500 och Win-AVR
Postat: 4 juni 2009, 21:56:53
av FarbrorEstland
Så efter mycket strul (Vista 64) har jag äntligen fått min STK500 att funka ihop med Vista.
Har aldrig jobbat med uC förut och absolut inte med att koda C, men jag ska ge det ett försök
Givetvis får jag problem med en gång. Har börjat med denna lilla kod:
Kod: Markera allt
#define F_CPU 1000000UL
#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
DDRA = 0b11111111;
PORTA = 0b10101010;
_delay_ms(4000);
PORTA = 0b01010101;
return 1;
}
Det funkar, men med ett fel. Tiden som ska gå mellan skiftningen av lysdioderna (anslutna till port a) ska vara 4 sekunder enligt koden, men dom skiftar redan efter ca en halv sekund. Jag kör med den interna oscillatorn och alla jumprar på STK500 är satta för det.
Vad har jag missat?
Sa jag att jag var ny på detta
All hjälp uppskattas och jag ber om ursäkt redan nu för att detta är en "super-enkel, dum" fråga.
Mvh Carl-Johan
Re: Nybörjar-problem med ATTINY26, STK500 och Win-AVR
Postat: 4 juni 2009, 22:06:41
av eqlazer
Koden är skriven för 1 MHz men med din beskrivning av förhållandet 4/0,5 så är det inte svårt att sluta sig till att den kör i 8 MHz. Vilket är precis vad den interna RC-oscillatorn har för hastighet om dess prescaler inte är aktiverad. Så ta och kolla igenom vilka fuses som är satta.
Re: Nybörjar-problem med ATTINY26, STK500 och Win-AVR
Postat: 4 juni 2009, 22:37:39
av FarbrorEstland
Tack!
Mycket riktigt. Då har jag lärt mig ytterligare något nytt idag
Tack för snabb hjälp!
Re: *LÖST* Nybörjar-problem med ATTINY26, STK500 och Win-AVR
Postat: 10 juni 2009, 23:40:45
av Swech
Är det verkligen riktigt att köra "return 1" ?
Bara nyfiken då jag kan alldeles för lite C....
Swech
Re: *LÖST* Nybörjar-problem med ATTINY26, STK500 och Win-AVR
Postat: 10 juni 2009, 23:54:36
av sodjan
Tja, på en mikrokontroller så finns det väl aldrig någon
anledning till att göra "return" från main(). Det är ju inget
specifikt för C, ingen kod ska tillåtas "ta slut" så att
processorn löper okontrollerat...
Re: *LÖST* Nybörjar-problem med ATTINY26, STK500 och Win-AVR
Postat: 11 juni 2009, 12:10:00
av jesse
men vad händer i praktiken när processorn når sista raden "return 1"??? Uppenbarligen fungerar programmet och lysdioderna shiftas, men även om processorn börjar om från början vid "return 1" så finns det ju ingen fördröjning efter att det senaste värdet skickats ut på PORTA?
Om man föreställer sig att "return 1" i praktiken innebär reset (eller goto 0x0000) så skulle ju värdet 0b01010101 på PORTA existera endast någon mikrosekund innan den börjar om igen

Re: *LÖST* Nybörjar-problem med ATTINY26, STK500 och Win-AVR
Postat: 11 juni 2009, 12:39:40
av sodjan
Det beror väldigt mycket på hur både kompilatorn och processorn i sig
hanterar det. Processorn kan t.ex göra så att programräknaren snurrar
runt genom hela den teroretiska adressrymden tills den "slår runt" och
nollställs igen, vilket ju kan ta ett litet tag.
Hur som helst, *varför* står det return där i koden ??
Re: *LÖST* Nybörjar-problem med ATTINY26, STK500 och Win-AVR
Postat: 11 juni 2009, 12:43:17
av vfr
Jag misstänker att det kan bero på miljön. Vad tillverkaren av den inbyggda miljön tycker att det ska hända vid ett sådant orimligt slut. Reset, eller omstart från reset, känns väl inte som helt onaturligt. Då borde man kunna ha rimliga möjligheter att detektera det iallafall om man nu har gjort ett sådant odefinierat slut.
Edit: Ja, ungefär samma sak!
Re: *LÖST* Nybörjar-problem med ATTINY26, STK500 och Win-AVR
Postat: 12 juni 2009, 16:18:36
av jesse
Man undrar ju vem som skrivit koden. Den borde ju innehålla en loop på något vis (som aldrig avslutas) och då blir "slutet" på programmet ointressant:
while (1) {
...
...satser...
...
}