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

[Bascom AVR] atmega8 - kompilacja pierwszego programu.

Tymsal 20 Sie 2005 11:03 2919 8
REKLAMA
  • #1 1749271
    Tymsal
    Poziom 11  
    Posty: 28
    Pomógł: 1
    Ocena: 5
    Dopiero zaczynam naukę w Bacsom avr i już napotkałem na problem.
    Zrobiłem programator kompatybilny z stk200 i zaprojektowałem uniwersalny system mikrokomputerowy
    z Atmega8 gdzie mam między innymi diodę podłączoną do portu C.2 a przełącznik do portu B.0.
    Napisałem następujący program w Bascom avr 1.11.7.7
    "
    Config Portc.2 = Output
    Config Portb.0 = Input
    Do
    If Portb.0 = 0 Then Portc.2 = 0
    If Portb.0 = 1 Then Portc.2 = 1
    Loop
    End
    "
    I wyskakuje mi błąd podczas kompilacji
    „error:41 line:1 Varkiable can not be used whit SET [DDRC]”

    Czyli nie można ustawić portu C.2 jako wyjście???? Już nic nie rozumiem.

    Z góry dziękuje za pomoc.

    Moderowany przez Light-I:

    Bardzo proszę o logiczne i zgodne z regulaminem tytułowanie tematu. Każdy, kto tu zakłada nowy temat, ma z czymś istotny problem... Treść tematu zmieniono na bardziej adekwatną.

  • REKLAMA
  • Pomocny post
    #2 1749359
    Dexter77
    Poziom 28  
    Posty: 889
    Pomógł: 134
    Ocena: 19
    Nie dolaczyles pliku z definicja jaki uc uzywasz.
    $regfile = "m8def.dat"

    Pozdro
    Dexter
  • #3 1763635
    grabek_radek
    Poziom 21  
    Posty: 579
    Pomógł: 2
    Ocena: 37
    witam
    wlasnie jesli chodzi o informowanie kompilatora o pliku dyrektyw wykorzystanego mikrokontrolera to jesli w bascomie nie ma pocka np 89c2051 to co nalezy zrobic wpisac $regfile="2051def.dat" ??
    bo np jesli chcemy zaprogramowac procka 90s2313 to sie wpisuje $regfile="2313def.dat"
  • REKLAMA
  • Pomocny post
    #4 1763791
    Kminek
    Poziom 15  
    Posty: 200
    Pomógł: 21
    Ocena: 16
    Hej!

    Powinno być tak:

    Config Pinc.2 = Output
    Config Pinb.0 = Input
    Do
    If Pinb.0 = 0 Then Portc.2 = 0
    If Pinb.0 = 1 Then Portc.2 = 1
    Loop
    End

    Dodano po 6 [minuty]:

    radosław grabiński napisał:
    witam
    wlasnie jesli chodzi o informowanie kompilatora o pliku dyrektyw wykorzystanego mikrokontrolera to jesli w bascomie nie ma pocka np 89c2051 to co nalezy zrobic wpisac $regfile="2051def.dat" ??
    bo np jesli chcemy zaprogramowac procka 90s2313 to się wpisuje $regfile="2313def.dat"




    Pamiętaj p tym, że są dwie całkowicie różne wersje Bascoma. Jeden przeznaczony na mikrokontrolery z rodziny '51 (tam napewno jest szukany przez Ciebie mikrokontroler) oraz Bascom-AVR przeznaczony dla mikrokontrolerów AVR. Wpisywanie do tego drugiego $regfile="2051def.dat" nic nie da.


    Pozdrawiam
  • #5 1764171
    Tymsal
    Poziom 11  
    Posty: 28
    Pomógł: 1
    Ocena: 5
    Dziękuję za odpowiedzi obecnie program wygląda tak:

    $regfile = "m8def.dat"
    Config Portc.2 = Output
    Config Portb.0 = Input
    Do
    If Portb.0 = 0 Then Portc.2 = 0
    If Portb.0 = 1 Then Portc.2 = 1
    Loop
    End
    "
    Kompilacja i programowanie bez problemu ale wejście portu B.0 (sprawdzałem na B.1 tak samo) nie reaguje na zmiany stanu.
    Port B.0 jest podpięty do vcc przez rezystor 10k a przełącznikiem zwieram go do masy. Pomierzyłem wszystko i stan niski na wejściu PB.0 atmega8 to 0V a wysoki 4,9V może cos z programem nie tak??
    Jak zmienię kod na :

    ...
    Do
    If Portb.0 = 1 Then Portc.2 = 0
    If Portb.0 = 0 Then Portc.2 = 1
    Loop
    End

    To zapala mi się dioda sygnalizująca stan wysoki na PC.2 i ciągle nie reaguje na zmiany stanu PB.0.
  • REKLAMA
  • Pomocny post
    #6 1764307
    Michał_z1
    Poziom 16  
    Posty: 190
    Pomógł: 13
    Ocena: 2
    wita.

    Zapomiałeś dopisać po konfiguracji portu (pinu) wejściowego podciągnięcie go do jedynki....portb.0=1

    pozdrawiam.
  • Pomocny post
    #7 1764479
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    Kolega Kminek podał (prawie) gotowe rozwiązanie ...
    
    Config Pinc.2 = Output
    Config Pinb.0 = Input
    Set Portb.0 ' o tym zapomniał ;)
    Do
       If Pinb.0 = 0 Then Portc.2 = 0
       If Pinb.0 = 1 Then Portc.2 = 1
       'lub 2 powyższe linie zastąpić poniższą
       'Portc.2=Pinb.0
    Loop
    End
    
    

    ... , a Ty nadal nie potrafisz odróżnić PORT-u od PIN-u.
    Nie wystarczy poznać sam kompilator , musisz mieć choćby podstawowe wiadomości o procu , który chcesz oprogramować.

    Piotrek
  • REKLAMA
  • Pomocny post
    #8 1764590
    Kminek
    Poziom 15  
    Posty: 200
    Pomógł: 21
    Ocena: 16
    Hej!

    Nic nie zapomniałem :) , tylko poprostu zawsze korzystając z przycisków podciągam wejscie pod plus 5V (Rezystor 10k). Z praktyki przekonałem się że jest to o wiele pewniejsze rozwiązanie niż ustawianie programowo stanu wysokiego.

    Pozdrawiam
  • #9 1764739
    Tymsal
    Poziom 11  
    Posty: 28
    Pomógł: 1
    Ocena: 5
    Działa! Ostateczna wersja programu :
    "
    $regfile = "m8def.dat"
    Config Pinc.2 = Output
    Config Pinb.0 = Input
    Do
    If Pinb.0 = 0 Then Portc.2 = 0
    If Pinb.0 = 1 Then Portc.2 = 1
    Loop
    End
    "
    Tyle czasu nad takim maleństwem :D
    Dziękuje wszystkim którzy zainteresowali się moim problemem.

Podsumowanie tematu

✨ Podczas nauki programowania mikrokontrolera Atmega8 w Bascom AVR pojawił się błąd kompilacji związany z konfiguracją portu C.2 jako wyjścia. Problem wynikał z braku deklaracji pliku definicji mikrokontrolera ($regfile = "m8def.dat"). Poprawna składnia wymagała użycia "Config Pinc.2 = Output" oraz "Config Pinb.0 = Input" zamiast "Portc.2" i "Portb.0" w konfiguracji. Dodatkowo, aby wejście portu B.0 poprawnie reagowało na zmiany stanu, konieczne było zapewnienie podciągnięcia linii wejściowej do stanu wysokiego, co można osiągnąć programowo przez "Set Portb.0" lub zewnętrznym rezystorem podciągającym do Vcc (np. 10kΩ). Ostatecznie działający program zawierał poprawne dyrektywy i konfiguracje pinów, co umożliwiło sterowanie diodą na PC.2 w zależności od stanu przełącznika na PB.0.
Wygenerowane przez model językowy.
REKLAMA