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

atmega128 da się programować ale nie daje znaku życia

AVRowiec 01 Lut 2010 00:08 1674 17
  • #1 7624826
    AVRowiec
    Poziom 18  
    jak w temacie.
    zaprogramowałem, ustawiłem fusy ale układ nie działa. co ciekawsze mam identyczny układ już wykonany. program który się wykonuje ma tylko migać lampkami i wysyłać coś na uarty ale nie dzieje się nic.
    scalak swoje przeżył - był dość mocno grzany hotairem (wlutowany wylutowany i znowu wlutowany ale już należycie :) )
    czy możliwe jest żeby coś się w środku przegrzało? program się wgrywa ale układzik na nic nie reaguje.

    wszystkie połączenia są na 100% ok, zasilanie też. sprawdziłem bardzo dokładnie..

    ma ktoś radę?
  • #2 7624886
    Konto nie istnieje
    Poziom 1  
  • #3 7624891
    __Maciek__
    Poziom 20  
    Po 1. reset ... sprawdź stan na nodze resetu .. ma być wysoki.
    po 2. rezonator .. jeśli używasz zewnętrznego rezonatora sprawdź przebieg taktujący.
  • #4 7624901
    Konto nie istnieje
    Poziom 1  
  • #5 7624932
    AVRowiec
    Poziom 18  
    fusy: H=D1 L=EF
    (taka kombinacja działa w identycznym układzie)
    na resecie: 5V względem masy

    teraz program ma migać (tj przełączać stan) pinów PE1 i PE0, czyli MISO i MOSI (skoro się programuje tzn te piny muszą być sprawne) , kontrolka świci światłem ciągłym na Tx czyli że niby ok chociaż powinna migać.

    while (1)
    {
    PORTE ^= _BV(0);
    PORTE ^= _BV(1);
    wait(100);
    }
  • #6 7624949
    Konto nie istnieje
    Poziom 1  
  • #7 7624965
    AVRowiec
    Poziom 18  
    void wait(int t)
    {
    for(int k=0; k<t; k++)
    for(char i=0; i<100; i++)
    for(int j=0; j<800; j++)
    asm("nop");
    }

    jak widać wait() jest mój własny ; dla 100 to jakieś pół sekundy więc powinno migać bardzo wyraźnie.

    ale czy aby napewno jest możliwe spalenie tylko "kawałka" procka? mnie to wydaje się dziwne ;/
  • #9 7625008
    mirekk36
    Poziom 42  
    Ludzie macie w AVR GCC ładne polecenia odmierzające opóźnienia co do taktu a wy zamiast tego bawicie się w jakieś własne pseudo_waity

    Jak chcesz żeby ci migało równo co pół sekundy to wystarczy napisać:

    while (1) 
    { 
        PORTE ^= _BV(0); 
        PORTE ^= _BV(1); 
        _delay_ms(500);
    }


    -----------------------------------------------

    poza tym to może pokaż cały swój kodzik, którym testujesz bo może się zaraz okaże , że to jednak przez niego - procek ci się nie odzywa
  • #10 7625036
    AVRowiec
    Poziom 18  
    while (1)
    {
    PORTE ^= _BV(0);
    PORTE ^= _BV(1);
    PORTA=0xFF;
    PORTC=0xFF;
    LED5_TOGGLE;
    //TS("start");
    _delay_ms(300);
    PORTA=0x00;
    PORTC=0x00;
    _delay_ms(300);
    }


    właśnie zaskoczyło przy wewnętrznym taktowaniu 1M. diodki migają ale bardzo wolno, zmieniają stan raz na dwie sekundy.

    piegzik - pomogłeś chociaż mój problem nadal nie jest rozwiązany...

    Dodano po 19 [minuty]:

    dałem spowrotem na KWARC 8M i działa. wygląda na to że problem jest gdzieś w inicie uartu bo to jedyna linijka jaka występuje przed pętlą.

    
    #define FOSC 8000000      // Clock Speed
    #define BAUD_UART0 19200  
    #define BAUD_UART1 9600   
    #define USART0PORT PORTE
    #define USART0DDR  DDRE
    #define RX0PIN 0
    #define TX0PIN 1
    #define USART1PORT PORTD
    #define USART1DDR  DDRD
    #define RX1PIN 2
    #define TX1PIN 3
    //////////////////////////////////////////////////////
    void USARTs_Init()
    {
    	unsigned int ubrr = FOSC/16/BAUD_UART1-1;
    	/* Set baud rate */
    	UBRR1H = (unsigned char)(ubrr>>8);
    	UBRR1L = (unsigned char)ubrr;
    	/* Enable receiver and transmitter */
    	UCSR1B = (1<<RXCIE1)|(1<<RXEN1)|(1<<TXEN1);
    	/* Set frame format: 8data, 1stop bit */
    	UCSR1C = (3<<UCSZ10);
    
    	ubrr = FOSC/16/BAUD_UART0-1;
    	/* Set baud rate */
    	UBRR0H = (unsigned char)(ubrr>>8);
    	UBRR0L = (unsigned char)ubrr;
    	/* Enable receiver and transmitter */
    	UCSR0B = (1<<RXCIE0)|(1<<RXEN0)|(1<<TXEN0);
    	/* Set frame format: 8data, 1stop bit */
    	UCSR0C = (3<<UCSZ00);
    
        // Ustawienie portów
    	// DDR
        USART0DDR |=  _BV(RX0PIN);
    	USART0DDR &= ~_BV(TX0PIN);  
    	USART1DDR |=  _BV(RX1PIN);
    	USART1DDR &= ~_BV(TX1PIN);
    	// PORT
    	USART0PORT |= _BV(RX0PIN);
    	USART0PORT |= _BV(TX0PIN);  
    	USART1PORT |= _BV(RX1PIN);
    	USART1PORT |= _BV(TX1PIN);
    }
    


    ten kod działa w identycznym układzie (tylko na innej płytce). dlaczego tutaj nie chce ruszyć?!
  • #11 7625382
    ElektroTME
    Poziom 14  
    Co do spalenia kawałka procka, ja spaliłem sobie wszystkie ADC(podając za wysokie napięcie na 1 nóżkę w tym trybie), poza tym wszystko inne działa bez zarzutu.
    Więc jest możliwe spalenie części układu, chociaż w tym przypadku dużo może zależeć też od kodu.
  • #12 7625507
    Balu
    Poziom 38  
    Nic nie pisałem, jest za wcześnie ^^

    Dodano po 4 [minuty]:

    A co do ADC to nie jest część układu, tylko ADC wbudowane w układ,logiczne więc, że za wysokie napięcie na ADC upali adc tylko (zależnie jak ustawione bedą klucze wew. układu).
  • #13 7626037
    asembler
    Poziom 32  
    Proste i skuteczne:
    Zamiat bawic sie w odliczanie taktow lub procedury opóźniające wystarczy podłaczyc dwie diody przeciwsobnie a w programie nie stosowac zadnych opoznien, Jezeli swiecą sie obydwie znaczy na porcie jest przebieg.
  • #14 7626696
    AVRowiec
    Poziom 18  
    dobry pomysł asembler, ale odkryłem że jednak wszystko działa.
    dwukrotne wywołanie funkcji USART_Transmit() rozwala kod. nie mam zielonego pojęcia dlaczego tak się dzieje. w innym układzie ten kod działa - pozatym jest prosto z datasheeta więc nic dziwnego.

    podsumowując kostka jest sprawna. przeżyła naprawde ostre grzanie hotairem i grotem i nic jej nie jest, błąd jest gdzieś w kodzie i jest to bardzo dziwny błąd..

    dziękuje wszystkim za pomoc.
  • #15 7626801
    Konto nie istnieje
    Poziom 1  
  • #16 7635255
    AVRowiec
    Poziom 18  
    znalazłem ten dziwny błąd.
    uart działa do połowy kiedy nie ustawi się bitu kompatybilności z atmega103.
    dałem efuse na 0xFF i wszystko śmiga.

    AVRy są chyba niezniszczalne :)
  • #18 7635878
    pol1111
    Poziom 12  
    To prawda że trzeba się mocno postarać żeby je popsuć, ale jest to moźliwe. Mi się udało uszkodzić kilka atmeg przez przegrzanie. Programowały się, ale niektóre piny były martwe. Nie dało się zapodać na nich wysokiego stanu na przykład. Uszkodzenie przetwornika ADC jest chyba najprostszym destrukcyjnym zadaniem.
    Ale i tak fajna sprawa jest z tym, że po uszkodzeniu czegoś tam, cały uC zachowuje sprawność.
REKLAMA