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 - Niepoprawne działanie programu.

shady79 03 Gru 2013 11:03 1509 15
  • #1 03 Gru 2013 11:03
    shady79
    Poziom 13  

    Witam,

    Zbudowałem taki układ:

    atmega8 - Niepoprawne działanie programu.

    Czy zasilanie mikrokontrolera jest prawidłowe oraz czy nie za mało dałem kondensatorów ceramicznych bo mam pewne problemy z uC.

    Program się co prawda wgrywa ale moim zdaniem nie funkcjonuje poprawnie. Np. ustawiam wszystkie porty C na wyjścia oraz w stan wysoki a mimo to brak jest na nich napięcia. Natomiast nie wiedzieć dlaczego stan wysoki mam na portach PB0 i PB1.

    Wdzięczny będę za wszelką pomoc.
    pozdr.
    Kuba

    0 15
  • #3 03 Gru 2013 11:31
    shady79
    Poziom 13  

    Program to nic szczególnego:

    #define F_CPU 8000000L
    #include <avr/io.h>
    #include <util/delay.h>


    int main(void)
    {
    DDRC = 0xFF;
    PORTC = 0xFF;

    while(1)
    {

    }
    }

    Powinien ustawić stan wysoki na portach C.
    Na razie próbuję podstawowych rzeczy aby sprawdzić czy układ działa poprawnie.

    0
  • #4 03 Gru 2013 11:42
    dondu
    Moderator Mikrokontrolery Projektowanie

    Jeżeli masz faktycznie taki schemat i program, a programowanie przebiegło prawidłowo, to powinieneś mieć stan wysoki na wszystkich pinach PC (wyłączając PC6, bo to RESET, a zakładam że go nie wyłączyłeś).

    Skoro więc zamiast portu C ustawia Ci port B, to możliwy jest błąd w bibliotekach (przypadkowa edycja).
    Ustaw jakieś mruganie diodą na PC0 (co pół sekundy) i sprawdź, czy zmiany stanu pinów będą na PC0, czy PB0.

    I pokaż zdjęcia.

    0
  • #5 03 Gru 2013 11:49
    shady79
    Poziom 13  

    Wygląda na to że, mikrokontroler nie reaguje na wgrany program tylko pamięta coś starego. Zaraz jeszcze spróbuję ustawić wszystkie piny B oraz C w stan niski i zobaczę co się wtedy się na nich pojawi.

    0
  • #7 03 Gru 2013 12:05
    shady79
    Poziom 13  

    Teraz zrobiłem tak:

    int main(void)
    {
    DDRC = 0xFF;
    PORTC = 0x00;

    DDRB = 0xFF;
    PORTB = 0x00;


    while(1)
    {

    }
    }


    Sytuacja bez zmian, cały czas PB0 i PB1 są w stanie wysokim. Bibliotek nie edytowałem. Wczoraj instalowałem eclipse i winavr.

    fotki:



    atmega8 - Niepoprawne działanie programu.

    atmega8 - Niepoprawne działanie programu.

    0
  • #9 03 Gru 2013 12:28
    shady79
    Poziom 13  

    Teraz tak:

    #define F_CPU 8000000L
    #include <avr/io.h>
    #include <util/delay.h>


    int main(void)
    {
    DDRC = 0xFF;
    PORTC = 0x00;

    DDRB = 0xFF;
    PORTB = 0x00;


    while(1)
    {
    _delay_ms(500);
    PORTB = 0xFF;
    _delay_ms(500);
    PORTB = 0x00;
    }
    }






    Launching C:\WinAVR-20100110\bin\avrdude -pm8 -cusbasp -Uflash:w:sterownik.hex:a
    Output:

    avrdude: AVR device initialized and ready to accept instructions

    Reading | ################################################## | 100% 0.01s

    avrdude: Device signature = 0x1e9307
    avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
    To disable this feature, specify the -D option.
    avrdude: erasing chip
    avrdude: reading input file "sterownik.hex"
    avrdude: input file sterownik.hex auto detected as Intel Hex
    avrdude: writing flash (66 bytes):

    Writing | ################################################## | 100% 0.03s

    avrdude: 66 bytes of flash written
    avrdude: verifying flash memory against sterownik.hex:
    avrdude: load data flash data from input file sterownik.hex:
    avrdude: input file sterownik.hex auto detected as Intel Hex
    avrdude: input file sterownik.hex contains 66 bytes
    avrdude: reading on-chip flash data:

    Reading | ################################################## | 100% 0.03s

    avrdude: verifying ...
    avrdude: 66 bytes of flash verified

    avrdude done. Thank you.

    avrdude finished


    Tak pin 8 jest podłączony do masy.
    Nadal nic się nie zmieniło. Stan wysoki na PB0 i PB1 dwa skrajne porty z prawej strony uC. Brak pulsowania.

    Dodano po 5 [minuty]:

    Może on jakiś zwis łapie zaraz na początku i program się nie wykonuje..???

    0
  • #10 03 Gru 2013 12:29
    dondu
    Moderator Mikrokontrolery Projektowanie

    W załączniku masz skompilowany Twój kod (ten poniżej) i sprawdzony na moim ATMega8.
    Zaprogramuj swój mikrokontroler tym plikiem.

    Kody programu wklejaj używając znacznika SYNTAX:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    W przyszłości nie definiuj F_CPU w kodzie z tych powodów: http://mikrokontrolery.blogspot.com/2011/03/fcpu-gcc-gdzie-definiowac.html

    EDIT.

    1. Jeżeli mikorkontroler zostanie zaprogramowany prawidłowo plikiem z załącznika i nadal nie będzie działać (pulsowanie pinów), to może oznaczać uszkodzenie mikrokontrolera. Tutaj pytanie o jego przeszłość :)

    2. Odczytaj fusebity i podaj jak są ustawione (ich wartości hex).

    0
  • #12 03 Gru 2013 12:40
    shady79
    Poziom 13  

    wgrałem teraz od siebie program zmodyfikowany z eclipse'a a mimo to nadal siedzi ten z Twojego pliku. Wygląda na to że nie wgrywa się po przez eclipse. Twój wgrywałem ręcznie z lini poleceń.

    0
  • #14 04 Gru 2013 11:51
    shady79
    Poziom 13  

    Masz rację, chyba nie zapisywałem przed kompilacją... Teraz już działa... Dzięki

    Captain_Nemo napisał:
    Tak sobie pozwolę strzelić:
    1. nie zapisujesz projektu przed kompilacją
    lub
    2. nie kompilujesz projektu w ogóle :)

    0
  • #16 07 Gru 2013 09:14
    shady79
    Poziom 13  

    Dziękuje za pomoc, zamykam temat.

    0