AVR - Atmega32 - STK500 SNÄLLA HJÄLP

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
sagittarius83
Inlägg: 9
Blev medlem: 22 december 2008, 23:52:31
Ort: Södertälje
Kontakt:

AVR - Atmega32 - STK500 SNÄLLA HJÄLP

Inlägg av sagittarius83 »

Hejsan! :)
Jag använder en Atmega32-microprocessor i en STK500-programeringskort och AVR-studio för att spara (föra över) ett enkelt blink-program i microprocesorn, men har ingen aning om hur man kopplar, hur och när det borde ske samt när man ska trycka på "PROGRAM"-knappen (efter/före kompilering) som finns på kortet?

Jag har försökt koppla de två pinnarna för "PROGRAM"-knappen till "Sprog" för Atmega32, men den sparas inte i microprocessorn? :oops:

Jag skulle vara mycket tacksam om jag kunde få hjälp eller kanske en guide för hur man gör...

Tack på förhand
God jul & gott nytt år
Användarvisningsbild
Stinrew
Inlägg: 954
Blev medlem: 20 augusti 2006, 03:14:41
Ort: Motala
Kontakt:

Inlägg av Stinrew »

Hej och välkommen till forumet!

Standardsvaret är ju som bekant RTFM. Om du saknar manual finns den på Atmels hemsida,här.

Kolla:
* Att kretsen sitter rättvänd, och i rätt sockel(SCKT3100A3).
* Att alla byglar sitter rätt.
* Att den 6-poliga flatkabeln med IDC-kontakter i båda ändar sitter kopplad till rätt socklar(röd i det här fallet. Dvs. ISP6PIN kopplad till SPROG3).
* Strömmatning till STK500 samt seriekabel mellan PC och RS232 CTRL anslutet.

PROGRAM-knappen ska du inte bråka med, den har bara med uppgradering av STK500ns firmware att göra. När du har kollat att allt är grönt i punkterna jag angett ovan sköter du resten ifrån AVRStudio. Nu minns jag kanske inte allt, då jag har mina prylar ~110 mil härifrån. Men jag ska försöka berätta vad du ska göra:

* Slå på STK500n.
* Starta AVRStudio.
* Klicka på AVR-ikonen, och se till att välja STK500 och auto på COM-port.
* Välj rätt processortyp(mega32).
* Välj kompilerad *.hex-fil att skriva till processorns flash(inte EEPROM).
* Klicka på program-knappen.

Detta bör räcka för att få igång din processor. Den kommer troligtvis initiellt att klockas av den interna RC-oscillatorn på 8MHz, nerdelat till 1MHz. Det finns en flagga(ckdiv8), som bestämmer om frekvensen ska divideras med 8 eller ej. Vidare kan du välja oscillatortyp. På ett annat ställe kan du ställa in ISP-frekvensen, detta kan vara aktuellt om ISP-frekvensen är för hög i förhållande till processorns(då kanske programmet inte överförs korrekt, men i så fall varnar AVRstudio).

/Lycka till!
hatten
Inlägg: 94
Blev medlem: 9 maj 2008, 22:16:23
Ort: Uppsala

Inlägg av hatten »

Du har redan fått ett bra svar, jag tänkte bara tillägga att du även bör notera hur LEDarna är inkopplade (sidan 12 i den manual Stinrew länkade till). För att tända en diod måste du således skriva '0' till motsvarande pinne, och inte '1', vilket kanske hade varit mer intuitivt..

Lycka till!
sagittarius83
Inlägg: 9
Blev medlem: 22 december 2008, 23:52:31
Ort: Södertälje
Kontakt:

Inlägg av sagittarius83 »

Stort tack "Stinrew" & "hatten" för hjälpen... Jag ska följa din guide och återkommer med resultat...

Tack igen
Senast redigerad av sagittarius83 23 december 2008, 16:26:20, redigerad totalt 1 gång.
Användarvisningsbild
Stinrew
Inlägg: 954
Blev medlem: 20 augusti 2006, 03:14:41
Ort: Motala
Kontakt:

Inlägg av Stinrew »

Just ja, missade ju att berätta hur du kopplar in lysdioderna. Mega32an har ju många portar. T.ex. kan du ju koppla in dom till PORTC. Ta då en av dom 10-poliga flatkablarna, och koppla in ena IDC-kontakten till LEDS och den andra till PORTC(ungefär som på sidan 2-2 i manualen). Ibland kan det ju vara så att lysdioden blinkar i så hög frekvens att ögat uppfattar det som att den lyser konstant. Då kan ett tips vara att räkna upp ett 8-bitars register, och uppdatera alla 8 lysdioder varje iteration. Jag ska försöka illustrera detta med lite C-kod:

Kod: Markera allt

#include avr/io.h       //Behövs för portkommunikationen

int main(void) {
    
    unsigned char ucValue = 0;
    DDRC = 0xFF;      //Initierar alla pinnar hos PORTC till utgångar, 0xFF <=> 0b11111111
    PORTC = 0xFF;    //Sätter alla pinnar hos PORTC till '1', vilket släcker samtliga lysdioder
    
    while(1) {            //Evig loop
        /*Öka 8-bitars registret med 1*/
        ucValue++;     //Ekvivalent med ucValue = ucValue + 1; 
                             //När ucValue kommit till 255 börjar den automatiskt om från 0.

        /*Uppdatera PORTC med det nya värdet*/
        PORTC = ~ucValue;    //~ betyder att samtliga bitar i ucValue inverteras, 
                                        //detta för att lysdioderna ska räkna upp och inte ner
    }
    return 0;            //Programmet returnerar '0' om det avslutats korrekt
}
Skriv svar