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

Atmega162 nie startuje program...

sundayman 20 Kwi 2010 02:56 1058 4
REKLAMA
  • #1 7981782
    sundayman
    Poziom 26  
    Taki mi się urodził problem.

    Mam tutaj M162, w dość prostym układzie (TQFP 44).
    Programator USBasp.

    Kłopot jest taki - spod mkAVRCalculator ustawiłem sobie fusy na :
    lfuse FF, hfuse D9, extended FF.

    Mam kwarc na 11.059 MHz.
    I teraz tak - zarówno spod avrdude, jaki i spod mkAVRCalculator mam poprawną komunikację. Mogę sobie odczytać fusy, flash itp.
    Bezproblemowo. Oscylator na kwarcu chodzi (no, przynajmniej są oscylacje na XTAL).

    Ale, kiedy sobie zrobiłem testowy programik w bascomie, coby sprawdzić czy wszystko jest ok, to oczywiście HEX się zapisuje bezproblemowo - tyle - że kompletnie nic się nie dzieje.

    A program jest banalny, ot - pomachać ledami ;
    ___________________________________________________________________
    'PROGRAM TESTOWY 1-st
    
    $regfile = "M162def.dat"
    $crystal = 11059200
    $baud = 9600
    
    Config 1wire = Portc.0
    
    Config Pina.0 = Output                                      'wyjście na K1
    Config Pina.1 = Output                                      'wyjscie na K2
    Config Pina.2 = Output                                      'wyjście na K3
    Config Pina.3 = Output                                      'wyjście na K4
    
    Config Pina.4 = Output                                      'wyjście LED online
    Config Pina.5 = Output                                      'wyjśćie led RX
    Config Pina.6 = Output                                      'wyjśćie led TX
    
    K1 Alias Pina.0
    K2 Alias Pina.1
    K3 Alias Pina.2
    K4 Alias Pina.3
    
    Led_online Alias Pina.4
    Led_rx Alias Pina.5
    Led_tx Alias Pina.6
    
    Do
    
    Led_online = 1
    Led_rx = 1
    Led_tx = 1
    
    Waitms 50
    
    Led_online = 0
    Led_rx = 0
    Led_tx = 0
    
    Waitms 50
    
    Loop
    End
    _________________________________________
    

    Oczywiście posprawdzalem wszystkie zasilania, ledy są podłączone przez tranzystorki - no, wydaje mi się że sprzętowo wszystko jest ok.
    Uważałem na ESD, układ na macie, lutowałem w opasce itp itp

    Kurka wodna, o co może chodzić ?
    Do tej pory robiłem kilka układów na Atmega16, i nigdy nie miałem takiego
    problemu.

    Czego szukać waszym zdaniem ?
  • REKLAMA
  • #2 7981783
    Dawid_20
    Poziom 17  
    Nie config PIN, tylko config PORT. PIN służy do odczytywania stanu.
  • REKLAMA
  • #3 7981785
    sundayman
    Poziom 26  
    No tak, zrobiłem tak :

    ___________________________
    'PROGRAM TESTOWY 1-st
    
    $regfile = "M162def.dat"
    $crystal = 11059200
    $baud = 9600
    
    
    Config Porta = Output
    Led Alias Porta.6
    
    
    Do
    Led = 1
    Waitms 50
    Led = 0
    Waitms 50
    Loop
    
    End
    
    _______________________________
    

    i działa.
    Ale nie rozumiem, bo w manualu AVR 1.11.7.4 jest :

    Składnia:

    CONFIG PORTx = tryb
    CONFIG PINx.y = tryb

    No, to wydawało by się, że config pinx,y też powinien działać ?

    A poza tym, np. na porcie D chcę mieć na jednym pinie wyjście, a poza tym
    korzystać z uarta, który jest na porcie D, to jak - mam ustawić "config portd = output" ? To mi nie przełączy wszystkich bitów portu na wyjście ?

    Następnym razem, proszę umieścić kod w odpowiednich znacznikach - poprawiłem.
    [zumek]
  • REKLAMA
  • #4 7982231
    Maciekqbn
    Poziom 15  
    W manualu piszą prawidłowo, tzn. jeśli definiujesz cały port, to piszesz:

    config porta = output

    jeśli definiujesz poszczególne piny, to piszesz:

    config pina.5 = output

    Ale TYLKO podczas definiowania, w programie odwołujesz się do PORTA.5 gdy wpisujesz wartość.

    Do PIN odwołujesz się gdy czytasz wartość (jeśli linia zdefiniowana jest uprzednio jako wejście).

    W pierwszym przykładzie (tym co nie działa) zdefiniowałeś linie jako bitowe, spróbuj zatem do ich zmiany użyć instrukcji odpowiednio:

    set porta.5
    reset porta.5

    Ciekawe czy zadziała? ;-)


    Cytat:
    A poza tym, np. na porcie D chcę mieć na jednym pinie wyjście, a poza tym
    korzystać z uarta, który jest na porcie D, to jak - mam ustawić "config portd = output" ? To mi nie przełączy wszystkich bitów portu na wyjście ?


    Możesz zrobic tak:

    Config Portd = Output
    Config Pind.0 = Input 'rxd

    Cały port jako wyjście, D0 czyli rxd jest wejściem.

    Lub tak:

    Config Portd = Input
    Config pind.1 = output 'txd

    Czyli cały port jest wejściem za wyjątkiem D1 czyli txd.

    Oczywiście możliwe są wszelkie kombinacje powyższych ustawień - zależnie od potrzeb.
  • #5 7983244
    sundayman
    Poziom 26  
    Już zakumałem, dzięki za podpowiedź :)
REKLAMA