logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Atmega128 - indeksowanie tablicy

lthomasl 03 Paź 2010 01:07 1326 9
  • #1 8577348
    lthomasl
    Poziom 10  
    Witam,
    mam dosc dziwny problem z indeksowaniem tablicy pod atmega128 .

    przykladowy kod:
    
    
    uint8_t tablica[3];
    
    tablica[0] = 0B11100000;
    tablica[1] = 0B00001000;
    tablica[2] = 0B01100000;
    
    int i = 0;
    while(1)
    {
    for(i = 0; i < 3; i++)
    {
    PORTE = tablica[i];
    _delay_ms(100);
    }
    }
    


    Odwołując się do tablicy poprzez zmienną nie mogę kompletnie nić zrobić, atmega nie reaguje w żaden sposób - po prostu cisza.


    Drugi przykład działa już jak najbardziej:

    
    
    uint8_t tablica[3];
    
    tablica[0] = 0B11100000;
    tablica[1] = 0B00001000;
    tablica[2] = 0B01100000;
    
    int i = 0;
    while(1)
    {
    
    PORTE = tablica[0];
    _delay_ms(100);
    
    PORTE = tablica[1];
    _delay_ms(100);
    
    PORTE = tablica[3];
    _delay_ms(100);
    
    }
    


    Jeśli ktoś ma chwile i wie jak rozwiązać powyższy problem to proszę o pomoc.
    Z góry dzięki
  • #2 8577464
    ZbeeGin
    Poziom 39  
    Czy to jest cały Twój program? Bo ewidentnie brak tu pewnych standardowych rzeczy: dołączenie odpowiednich nagłówków, ustalenie kierunku portu...
    I do tego jaki kompilator? Która wersja?
  • #3 8577608
    lthomasl
    Poziom 10  
    #include <avr/io.h>
    #include <util/delay.h>
    #include <stdio.h> 
    #include <stdlib.h>
    
    int main()
    {
    
    DDRE = 0B11111111; //USTAWIENIE PORTUE JAKO WYJSCIE
    uint8_t tablica[3];
    
    tablica[0] = 0B11100000;
    tablica[1] = 0B00001000;
    tablica[2] = 0B01100000;
    
    
    int i = 0;
    while(1)
    {
    for(i = 0; i < 3; i++)
    {
    PORTE = tablica[i];
    _delay_ms(100);
    }
    } 
    
    }
    


    Układ na tak wgrany program nie reaguje w żaden sposób, pomimo poprawnej kompilacji oraz poprawnego wgrania do pamieci przez program avrdude.

    Kompilator: Programmer's Notepad 2 , v2.0.8.718-basie
    Wrzucam na atmege128: avrdude gui v0.2.0

    Dodano po 2 [godziny] 49 [minuty]:

    ma ktos moze jakis pomysl?
  • #4 8578435
    janbernat
    Poziom 38  
    Chyba str70 avr-libc-user-manual.
  • #5 8580071
    ZbeeGin
    Poziom 39  
    Nie mam teraz ATMega128, ale symulacja w AVR Studio wskazuje, że program działa poprawnie.

    Cytat:
    Chyba str70 avr-libc-user-manual.

    W tym wypadku nie widzę błędów adresacji SFR
    20:             PORTE = tablica[i]; 
    +00000074:   01FB        MOVW      R30,R22
    +00000075:   0FE2        ADD       R30,R18
    +00000076:   1FF3        ADC       R31,R19
    +00000077:   8180        LDD       R24,Z+0
    +00000078:   B983        OUT       0x03,R24
  • #6 8580314
    _Robak_
    Poziom 33  
    Ja mam pomysł, sprawdź fuse bit atmega103 compatibility;)
  • #7 8580342
    ZbeeGin
    Poziom 39  
    _Robak_ napisał:
    Ja mam pomysł, sprawdź fuse bit atmega103 compatibility;)

    Tylko dziwne, że mu to działa przy indeksach stałych. Ale cuda się zdarzają.
  • #8 8580480
    janbernat
    Poziom 38  
    Na ATmega32- bo akurat taką mam podłączoną- działa.
  • #9 8580483
    _Robak_
    Poziom 33  
    ZbeeGin napisał:
    _Robak_ napisał:
    Ja mam pomysł, sprawdź fuse bit atmega103 compatibility;)

    Tylko dziwne, że mu to działa przy indeksach stałych. Ale cuda się zdarzają.

    Bynajmniej mi nie chodzi o brak portu E, niech się wypowie autor jak ma fusa ustawionego, może rzeczywiście cud...
  • #10 8582197
    lthomasl
    Poziom 10  
    dziekuje, za zainteresowanie sie tematem.
    przepraszam za zwloke, ale chwilowy brak internetu

    Panowie bardzo wam dziekuje, tak jak napisal _Robak_ 'atmega103 compatibility'
    ...... ustawilem extended fuse na 0xFF i od razu zaskoczylo, dzieki wielkie:) jednak cud :)
REKLAMA