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

problem z Attiny 2313 nie realizuje programu

a2d2a2m 26 Lis 2008 14:56 1036 7
  • #1 26 Lis 2008 14:56
    a2d2a2m
    Poziom 15  

    Mikrokontroler się programuje ale na portach nie pojawiają się zadeklarowane w programie stany.Programowany w Avr studio i WinAvr, a zapis dokonywany programem ponyprog. Czy powodem może być brak w nagłówku definicji attiny2313. Fuse bity nie powinny mieć wpływu, a dodatkowo nie były zmieniane. Może ktoś spotkał się z tym problemem?

    0 7
  • CControls
  • #2 26 Lis 2008 15:22
    dawid512
    Poziom 32  

    Nagłówek <avr/io.h> oczywiście masz? Skoro nie ma w nim attiny2313 to pewnie posiadasz starą wersję win avr. Proponują pobrać najnowszą i powtórzyć programowanie. Możesz także pokazać swój kod. W pony progu mam nadzieję że wybrałeś attiny2313.

    0
  • #3 26 Lis 2008 15:32
    a2d2a2m
    Poziom 15  

    Nagłowek mam, kod jest prawidłowy. Ogrniczyłem go nawet do wystawieniu 1 na portach, a potem 0 i nic.

    0
  • CControls
  • Pomocny post
    #4 26 Lis 2008 15:36
    dawid512
    Poziom 32  

    Pobrałeś najnowsze avr studio i win avr? W pony progu wybrałeś model uc? Pokaż ten twój program. Udzielaj także dłuższych wypowiedzi i konkretnie opisuj wszystko.

    0
  • #5 26 Lis 2008 16:47
    d.d
    Poziom 20  

    a2d2a2m napisał:
    Nagłowek mam, kod jest prawidłowy. Ogrniczyłem go nawet do wystawieniu 1 na portach, a potem 0 i nic.


    A czy wcześniej ustawiłeś port jako wyjście DDRX=0xFF; ?? .
    Zobacz tu LINK
    PS. tylko nie używaj wspomnianych na tej stronie sbi cbi .

    0
  • #6 27 Lis 2008 15:19
    a2d2a2m
    Poziom 15  

    Przykładowo:

    Code:

    #include <avr/io.h>
    #include <stdlib.h>
    #include <avr/interrupt.h>
    #include <avr/signal.h>
    #include <avr/pgmspace.h>

    int d=0;
    int a=0;
    int b=0;
    int x=0;
    volatile c=0;


    void waitms(char x)
    {
    unsigned char a,b;
    for( ; x>0;--x)

       for (b=10;b>0;--b)
          for(a=100;a>0;--a)
          __asm("nop");
          }

    ISR(TIM1_OVF_vect)
    {
    if (c==0)
    c=1;
    else
    c=0;
    waitms(5);
    }

    main(void)
    {
    PORTB=0xff;
    DDRB=0x0f;
    PORTD=0xff;
    DDRD=0x73;
    sei();
    while(1)
    {
    if (c==0)
    {
    //sprawdzanie czujnikow i wyzwalanie
       d=d+1;
         if (d<1000)
            {
    //sprawdzanie prawie wszystkich czujnkiow
            }
         else
            {
    //sprawdzanie wszystich
            }

    }
    else
    {
    //wygaszenie diody resetowamnie portow i
    }

    }
    }

    Kompilacja i wgranie przebiega prawidłowo. Odczyt po zaprogramowaniu podje ten kod co zapisałem. Wyczyszczenie całej pamięci mikrokontrolera nie powoduje zmian na jego wyjściach. Spróbuję zdefiniować używany mikrokontroler. Probowałem z max. uproszczonym kodem( ustawienie potrów jako wyjście i wystawienie jedynek) i nadal brak zmian na portach.

    Proszę umieszczać kod, w znacznikach [code] - tym razem dodałem.
    [zumek]

    0
  • #7 28 Lis 2008 08:54
    a2d2a2m
    Poziom 15  

    Jeżeli ktoś może skompilować program, który będzie konfigurował wszystkie porty jako wyjścia i wystawiał 1 na wyjściach, to bardzo proszę o przesłanie na adres a2d2a2m(malpa)wp.pl. Bardzo ułatwi mi znalezienie problemu. Dodatkowo proszę o kod źródłowy i info czym było kompilowane. Da mi to pewność, że układ i mikrokontroler są ok. Teraz mam zbyt wiele niewiadomych.
    Z góry dzięki

    0
  • #8 29 Lis 2008 11:28
    a2d2a2m
    Poziom 15  

    Problem rozwiązany. Dziękuję wszystkim za pomoc. Powodem był sprzętowy reset mikrokontrolera. Polegał on na połączeniu nóżki reset do masy przez rezystor 10k i połączenie nóżki reset do elektrolitu 10mikro połączonego do +5V. Skopiowałem takie rozwiązanie z zastosowanych w klonach 8051 i efekt był taki, że mikrokontroler był ciągle w stanie restartu i stąd dziwne stany na jego portach. Odłączenie rezustora od masy spowodowało prawidłową pracę mikrokontrolera.

    0