Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

ATmega8 - po drugim zaprogramowaniu niedziała

isolinux1 16 Wrz 2014 20:56 957 3
  • #1 16 Wrz 2014 20:56
    isolinux1
    Poziom 2  

    Witam mam problem z połączeniem się z mikrokontrolerem atmega8 przez programator usbasp
    w avrdude wyrzuca mi błąd:

    Spoiler:

    avrdude: warning: cannot set sck period. please check for usbasp firmware update.
    avrdude: error: programm enable: target doesn't answer. 1
    avrdude: initialization failed, rc=-1
    Double check connections and try again, or use -F to override
    this check.


    avrdude done. Thank you.

    Wiem, wiem oznacza to między innymi że mogą być źle połączone przewody albo ustawiony zewnętrzny rezonator kwarcowy ale.
    Wychodzi na to że przyczyna raczej tu nie leży, bo:
    podłączyłem programator do mikrokontrolera i wszystko działało jak należy,
    więc postanowiłem załadować pierwszy program:
    Code:

    //częstotliwość zegara 
    #define F_CPU41000000L   
     
    #include <avr/io.h> 
    #include <util/delay.h> 
     
    //definicja LED1 (do którego pinu podłączony LED1) 
    #define LED1 PB0   
     
    //definicja LED2 (do którego pinu podłączony LED2)   
    #define LED2 PB1   
     
     
    // Pętla główna 
    void main(void) 

        //########### I/O ########### 
        DDRB  |= (1<<LED1) | (1<<LED2); //Ustawienie pinów sterujących diodami 
                                             //jako wyjścia 
     
        PORTB |= (1<<LED1);    //Ustawienie stanu wysokiego na wyjściu   
                                     //sterującym LED1 (stan początkowy) 
         //########################## 
         
       while (1) //Pętla główna 
       { 
     
            PORTB ^=(1<<LED1); //suma modulo 2 (XOR) stanu poprzedniego na porcie   
                                 //pinu LED1 (zmiana stanu na przeciwny) 
     
            PORTB ^=(1<<LED2); //suma modulo 2 (XOR) stanu poprzedniego na porcie   
                                 //pinu LED2 (zmiana stanu na przeciwny) 




             
            _delay_ms(1000); //opóźnienie 1000ms czyli 1s 
        } 


    ale okazało się że ten program nie działa, znaczy nie dawał pożądanych rezultatów
    i dlatego wgrałem następny program:
    Code:

    #include <avr/io.h>
    #include <avr/delay.h>
    int main(void){

        // Konfiguracja odpowiednich pinów jako wyjścia
        DDRB |= (1<<PB1)|(1<<PB2);

        while(1){
       
            // Włączenie diody
            PORTB |= (1<<PB2);
                   
            // Czekanie 1 sekundę (1000 milisekund)
            _delay_ms(1000);
                   
            // Wyłączenie diody
            PORTB &= ~(1<<PB2);
                   
            // Czekanie 1 sekundę (1000 milisekund)
            _delay_ms(1000);
                           
        }
    }

    no właśnie od tego momentu gdy wgrałem ten program nie mogę się połączyć z atmega8 :(

    podkreślam że używam systemu Linux Ubuntu 14.04.
    do wgrywania programu używałem następujących poleceń w terminalu:
    Code:

    avr-gcc -mmcu=atmega8 program.c -o program (kompilacja pod avr)
    avr-objcopy -O ihex program program.hex (zmiana pliku binarnego na plik .hex)
    uisp -dprog=atmega8 --erase --upload if=program.hex --verify (jakaś weryfikacja
    której nie użyłem przy wgrywaniu drugiego programy być może to jest przyczyną)

    no i sam proces wgrywania
    Code:

    avrdude -c usbasp -p atmega8 -U flash:w:program.hex

    A, zanim zanim wgrałem pierwszy program ustawiłem sobie na wewnętrzny kwarc 4MHz.

    bardo proszę o pomoc.
    będę wdzięczny.

    Moderowany przez piotrva:


    Proszę używać znaczników SYNTAX, nie CODE. Proszę usunąć znaczniki spoiler, umieścić schemat, zdjęcia - inaczej temat będę musiał skasować.

    0 3
  • #2 17 Wrz 2014 16:28
    afterparty
    Poziom 12  

    Witam. A próbowałeś przestawić zworkę SLOW SCK na programatorze?

    0