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

[Atmega][GCC] Dziwne zachowanie przy podawaniu napięcia.

ddokupil 18 Lip 2009 13:08 1302 6
REKLAMA
  • #1 6793119
    ddokupil
    Poziom 15  
    Przy załączeniu napięcia atmedze na wyświetlaczu zamiast oczekiwanego napisu pojawiają się randomowe śmieci. Przy zwyczajnym resecie wszystko jest ok. Z resztą najlepie to widać na filmiku:




    Podejrzewam, ze to jest związane z tym, że atmega startuje zanim jeszcze napiecie się ustabilizuje. Ten sam efekt był na M32 i M128. Zarówno na płytce prototypowej którą sam lutowałem jak i na komercyjnej ewaluacyjnej.

    Napis który sie ma pojawić jest to string z pamięci programu. Mam tych stringów we flashu kilka zdefiniowanych i zauważyłem, ze te śmieci to są często fragmenty innych stringów. Tak jakby funkcja odczytująca stringi z pamięci programu nie trafiała w odpowiednie miejsce. Z resztą tak to wygląda w kodzie:
    //MAIN--MAIN--MAIN--MAIN--MAIN--MAIN--MAIN--MAIN--MAIN--MAIN--MAIN--MAIN--MAIN--MAIN--MAIN--MAIN--MAIN--MAIN
    portSHORT main(void)
    {
    	//Inicjalizacja LCD-------------------------------
    	LCD_Initalize();
    	_delay_ms(100);
    
    	//Queues------------------------------------------
    
    
    	KeybBuffer = xQueueCreate(5, sizeof(uint8_t));
    	ProgramAndMode = xQueueCreate(1, sizeof (struct ProgMode *));
    	MeasureQueue = xQueueCreate(3, sizeof(struct ADCstruct * ));
    	Tick = xQueueCreate(1, sizeof(uint8_t));
    
    	//Pozostałe inicjalizacje-----------------------------------
    
    
    	//i2cinit();
    	init_usart();
    	string_usart_P(PSTR("RESET\n\r"));
    	//LCD_WriteText("Inicjalizacja");
    	//_delay_ms(300);
    	vPwmChargeInit();
    	vMeasureInit();
    	vPwmDischargeInit();
    	SelectedLanguage = eeprom_read_byte(&Language);
    	//Start Tasks-------------------------------------
    
    


    
    //Stringi i tablice stringów w PROGMEM:
    
    static char Settings[][11] PROGMEM={{"Ustawienia"}, {"Settings"}};
    static char Lang[][8] PROGMEM={{"Polski "}, {"English"}};
    static char LanguageSelect[][16] PROGMEM={{"Wybierz jezyk"}, {"Select Language"}};
    static char ProgramSelect[][5] PROGMEM={{"NiCd"}, {"NiMh"}, {"LiPo"}, {"Pb  "}};




    void LCD_WriteText_P(volatile char * text)
    {
    while(pgm_read_byte( text))
      LCD_WriteData(pgm_read_byte( text++));
    }


    Jak się tego efektu pozbyć?
  • REKLAMA
  • REKLAMA
  • #3 6793143
    mr.Sławek
    Poziom 32  
    A nie da sie dac jakiegos opoznienia azeby program zaczal byc wykonywany dopiero po jakims czasie od wlacznia? Jesli wogole to jest przyczyna.
  • REKLAMA
  • #4 6793156
    ddokupil
    Poziom 15  
    mam _dalay_ms(100) ale po inicjalizacji LCD. Na początku było jako pierwsza instrukcja ale wtedy przez chwilę na wyświetlaczu pojawia się zaciemniona górna linia (wiadomo) co też nie jest idealnym wyjściem. Fusebity są ustawione na maksymalne opóźnienie włączania.
  • REKLAMA
  • #5 6793174
    _Robak_
    Poziom 33  
    Ale jak dales opoznienie to wszystko dzialalo tak ?
  • #7 6793196
    ddokupil
    Poziom 15  
    Nie. I co ciekawe jak na wyświetlaczu pojawiają się bzdury to procesor przestaje reagować. Nie przyjmuje nic z klawiatury co by się objawiało jakąkolwiek zmianą na wyświetlaczu a po RSie wysyła też bzdury. Dopiero trzeba reseta strzelić i wszystko działa.
REKLAMA