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

Atmega8L dziwne zachowanie

bosston 15 Wrz 2010 14:02 1592 11
  • #1 8513115
    bosston
    Poziom 11  
    Witam. Od niedawna zaczalem zabawe z uC. Do tej pory wszystko szlo dobrze i dzisiaj chcialem cos zglebic odnosnie zapisu/odczytu w eepromie. Wgralem program do uC, wszystko dzialalo i chcialem odczytac zawartosc eeprom na komputer. W avrdude gui zaznaczylem tylko EEPROM - Read i zadnych fusebitow nie ruszalem (byly takie jak wczesniej). Po tej operacji uC przestal mi dzialac i komunikowac sie z programatorem(korzystam z USBasp.. Szukalem troche juz po forum i znalazlem opcje z podlaczeniem kwarcu. Uklad zasilalem zewnetrznie - 3,3V, poniewaz mam podlaczony lcd noki 3310, i po przylozeniu kwarcu(4MHz) nic sie nie dzialo. Zmienilem zasilanie na 5V i o dziwo uklad ozyl. Chcialem wiec szybko wrzucic jeszcze raz .hexa. Podlaczylem programator i program rozpoznal uC. Ale podczas wrzucania wsadu zatrzymal sie wczesniej niz zazwyczaj i w konsoli byl jakis error. Kolejna proba wrzucenia juz sie nie powiodla. Teraz juz uC nie reaguje na kwarc, jest jakby martwy:( Jest dla niego jeszcze jakas szansa?
  • #2 8513321
    gaskoin
    Poziom 38  
    A mógłbyś pokazać jakiś program, schemat, komendy jakie wpisywałeś do avrdude, komunikat błędu czy mamy się wszystkiego domyślić ?
  • #3 8513357
    bosston
    Poziom 11  
    Korzystam z AVRdude gui, niestety za kazdym kliknieciem "execute" znika w konsoli, co bylo wczesniej. Low fuse write -D9, high fuse write - E1
    Z reszta dodam screen:
    Atmega8L dziwne zachowanie
  • #4 8513685
    mirekk36
    Poziom 42  
    Pobierz sobie najnowszą wersję programu MkAvrCalculator to w końcu będziesz mógł normalnie pracować, ustawiać fusebity a co ważne bezpiecznie, w sensie, żeby przez przypadek sobie procka nie zablokować. Tylko zainteresuj się zakładką "Fusy uproszczone" w tym programie.

    Z twoim prockiem ATmega8 program działa w pełni za FREE.
  • #5 8514671
    bosston
    Poziom 11  
    Najpierw musze go ozywic, zeby cokolwiek robic. Moze jest jakis dobry czlowiek we Wroclawiu, ktory moglby mi pomoc?:( Albo chociaz podac jakis "przepis"
  • #6 8514724
    Mat_91
    Poziom 25  
    Możesz spróbować podać sygnał zegarowy na CLKI, może pomoże.
  • #7 8514798
    bosston
    Poziom 11  
    W jaki sposob to zrobic? W uC siedze od zeszlego piatku odpiero.. Probowalem zrobic tak jak na tej stronie: http://www.henwyd.republika.pl/TekstyHTML/Atmega8.htm
    i to pod kazde wyjscie, ale bez skutku (moze niewlasciwie podlaczylem? masy razem, zasilanie tylko na generator i wyjscie pod PB6). Jeszcze probowalem kwarc 4MHz z 2 kondensatorami 22pF i tak samo....
  • Pomocny post
    #8 8514956
    Mat_91
    Poziom 25  
    Sygnał zegarowy podajesz np z generatora (dostępne w większości elektronicznych) albo np generujesz go za pomocą innego uC. Użyj szukaj, ten temat jest bardzo często poruszany :)
  • #9 8516323
    bosston
    Poziom 11  
    Na razie nie mam zadnego wolnego uC, ale jak bede mial to czy taki program wystarczy? Jak to podlaczyc? Dowolny pin portu x łączymy z XTAL1 zablokowanego procka, a reszta jak? Masy razem? Reset, zasilanie tez podac na zablokowanego?
    
    #include <avr/io.h> 
    
    int main(void) 
    { 
    DDRx=0xFF; 
    for(;;) 
    { 
      asm("nop"); 
      PORTx=0x00; 
      asm("nop"); 
      PORTx=0xFF; 
    } 
    }


    Mam kilka ne555, czy tym tez moglbym cos wskorac?
  • #10 8520934
    bosston
    Poziom 11  
    Udalo mi sie odratowac klocka:D Kupilem drugi uC i wklepalem do niego program wyzej podany i juz dziala:) Dziekuje wszystkim za pomoc:) Nie chcac zakladac nowego tematu zapytam sie o eeprom. Chcialbym zapisac 3 wartosci zmiennych typu float w eepromie jednorazowo, aby za kazdym kolejnym resetem urzadenia one juz sie nie zapisywaly na te z gory ustalone, tylko byly przechowywane inne, ktore modyfikuje w dalszej czesci programu.

    
    #include <avr/eeprom.h> 
    
    float temp1;
    float temp2;
    float hist;
    float EEMEM eetemp1;
    float EEMEM eetemp2;
    float EEMEM eehist;
    *float temp11=70;  - te wartosci chcialbym aby byly zapisane w pamieci 
    *float temp21=40;  -
    *float hist1=5;  -
    
    	*eeprom_write_float (&eetemp1, temp11);
    	*eeprom_write_float (&eetemp2, temp21);
    	*eeprom_write_float (&eehist, hist1);
    ....
    
    int main(void)
    {	
    	hist=eeprom_read_float (&eehist);
    	temp1=eeprom_read_float (&eetemp1);	
    	temp2=eeprom_read_float (&eetemp2);
    
    ...  zmiana tych 3 wartosci
    
    	eeprom_write_float (&eetemp1, temp1);
    	eeprom_write_float (&eetemp2, temp2);
    	eeprom_write_float (&eehist, hist);
    


    Czy powinienem skompilowac program z tymi narzuconymi wartosciami, zapisac gdzies plik .eep, usunac te linijki gdzie teraz mam "*" znowu skompilowac i wrzucic na uC nowego .hex i stary .eep? Wiem, ze brzmi dziwnie, ale nie chce czegos znowu skopac:/ Jeszcze raz dzieki:)
  • Pomocny post
    #11 8520956
    gaskoin
    Poziom 38  
    nie do końca tak to ma wyglądać

    makro EEMEM "mówi" kompilatorowi, że daną zmienną ma umieścić w eepromie.

    Więc wyglądać ma to tak:

    float EEMEM dupa = 3.32451324;


    nie wywołujesz funkcji eeprom_write - nią się ładuje dane do eeproma z poziomu programu.

    Przy kompilacji otrzymujesz plik *.hex i *.eep.

    W eep masz zawartość eeproma, która wystarczy wgrać w uC
  • #12 8521300
    bosston
    Poziom 11  
    Ok, rozumiem, juz dziala:)
REKLAMA