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

[ATmega8]-16PU [Bascom] nie działa program

pepitto 20 Lut 2010 21:33 2006 8
REKLAMA
  • #1 7725688
    pepitto
    Poziom 18  
    Witam,

    Napisałem program w bascomAVR i niestety nie chce działać tak jak powinien. Zapis na pamięci mikrokontrolera przebiega pomyślnie a mimo to układ zachowuje sie tak jakby programu wcale nie było. Poniżej zamieszczam plik .bas z programem, proszę kogoś kto się orientuje (ja jakoś nie mogę przerzucić się na cyfrówkę...) o rzucenie okiem na program, i przejrzenie czy ni ma w nim jakichś błędów.

    Za wszelakie przejawy pomocy bardzo dziękuję.

    Pozdrawiam, Pepi.

    Kod programu:

    
     $regfile = "m8def.dat"                                     'Typ miktokontrolera
     $crystal = 8000000                                         'taktowanie
     '$noramclear
    
     Config Portd = Output
            Portd = &B00000000
     Config Portb = Output
            Portb = &B00000000
     Config Portc = Input
            Portc = &B0000000
    
    
     Tow Alias Portc.4
     Q4 Alias Portc.0
     Q3 Alias Portc.1
     Q2 Alias Portc.2
     Q1 Alias Portc.3
    
    Do
    
       If Tow = 1 And Q4 = 0 And Q3 = 0 And Q2 = 0 And Q1 = 1 Then
       Gosub Przelacz1
    
        Elseif Tow = 1 And Q4 = 0 And Q3 = 0 And Q2 = 1 And Q1 = 0 Then
        Gosub Przelacz2
    
        Elseif Tow = 1 And Q4 = 0 And Q3 = 0 And Q2 = 1 And Q1 = 1 Then
        Gosub Przelacz3
    
        Elseif Tow = 1 And Q4 = 0 And Q3 = 1 And Q2 = 0 And Q1 = 0 Then
        Gosub Przelacz4
    
        Elseif Tow = 1 And Q4 = 0 And Q3 = 1 And Q2 = 0 And Q1 = 1 Then
        Gosub Przelacz5
    
        Elseif Tow = 1 And Q4 = 0 And Q3 = 1 And Q2 = 1 And Q1 = 0 Then
        Gosub Przelacz6
    
        Elseif Tow = 1 And Q4 = 1 And Q3 = 0 And Q2 = 1 And Q1 = 0 Then
        Gosub Shutdown
    
       End If
    
    Loop


    inventco.eu - program umieszczamy z znacznikach CODE, proszę stosować się do regulaminu forum i tego działu. Tytuł tym razem poprawiłem.
  • REKLAMA
  • REKLAMA
  • #3 7725837
    alien_audio
    Poziom 21  
    Witam.
    zła definicja portów wejściowych zamiast tego:

     'Config Portc = Input
    ' Portc = &B0000000
    ' Tow Alias Portc.4
    'Q4 Alias Portc.0
    ' Q3 Alias Portc.1
    ' Q2 Alias Portc.2
    'Q1 Alias Portc.3

    zrób tak:

    Config Pinc.4 = Input
    Tow Alias Pinc.4
    
     Config Pinc.0 = Input
     Q4 Alias Pinc.0
    
     Config Pinc.1 = Input
     Q3 Alias Pinc.1
    
     Config Pinc.2 = Input
     Q2 Alias Pinc.2
    
     Config Pinc.3 = Input
     Q1 Alias Pinc.3
  • REKLAMA
  • #4 7725852
    zbychmg
    Poziom 31  
    Nie wiem po co zmienna TOW, która zawsze powinna być =1
    Jeżeli TOW będzie równy 0 to program będzie działał tak jakby go
    nie było.
    Dodaj sobie jakieś miganie diody gdy TOW=0, wtedy będziesz mógł saprawdzić, czy program działa.
    Albo daj sobie jakieś mruganie na początku gdy program startuje...

    Dodano po 50 [sekundy]:

    Musisz po prostu sprawdzić, czy program wgrywa się do kostki prawidłowo
  • #5 7725866
    Logan
    Poziom 30  
    zbychmg napisał:

    Musisz po prostu sprawdzić, czy program wgrywa się do kostki prawidłowo


    Przecież Bascom sam weryfikuje poprawność wsadu.
  • #6 7725869
    pepitto
    Poziom 18  
    Cytat:
    Dużo lepsze myślę bedzie np:
    Kod:

    If Tow = 1 And PINC = &b00001000 Then





    Port c w ATmedze8 ma tylko 7 pinów.

    Sprubuję najpierw pomysłu kolegi alien_audio.

    Dodano po 5 [minuty]:

    Zmienna TOW jest jedynką tylko podczas trzymania przycisku, na Q1-Q4 zatrzaskuje się kod binarny aż do naciśnięcia następnego. Chodzi o to żeby mikrokontroler przełączał 6 wyjść niezależnie, gdybym zrobił tak jak mówisz to kiedy jedno by się włączało drugie by się wyłączało a to jest niedopuszczalne.
  • Pomocny post
    #7 7725952
    alien_audio
    Poziom 21  
    A jak podłączyłeś przycisk TOW do portu ?
    Standardowo ustawiamy port jako wejściowy i podciągamy go do plusa przez rezystor wewnętrzny a przyciskiem zwieramy do masy.

    Dodano po 4 [minuty]:

    Wystarczy wtedy uznajemy TOW jako aktywny z poziomem logicznym zero.
    Czyli zmienić tam gdzie TOW=1 na TOW=0
    Jak przycisk jest wciśnięty to mamy zero jak wolny to jeden
  • REKLAMA
  • Pomocny post
    #8 7726050
    grysek
    Poziom 19  
    alien_audio napisał:


     'Config Portc = Input
    ' Portc = &B0000000
    ' Tow Alias Portc.4
    'Q4 Alias Portc.0
    ' Q3 Alias Portc.1
    ' Q2 Alias Portc.2
    'Q1 Alias Portc.3


    zrób tak:

    Config Pinc.4 = Input
    Tow Alias Pinc.4
    
     Config Pinc.0 = Input
     Q4 Alias Pinc.0
    
     Config Pinc.1 = Input
     Q3 Alias Pinc.1
    
     Config Pinc.2 = Input
     Q2 Alias Pinc.2
    
     Config Pinc.3 = Input
     Q1 Alias Pinc.3


    Eee.. a co to zmienia? Zamiast ustawic wszystkie piny jako wejscia naraz, chcesz robic to samo tylko że po jednym - nie bardzo ma to sens.

    P.S tak masz rację PORTC ma 7 bitów ale podczas wczytywania wartości z rejsetru PINC ten ósmy bit zawsze bedzie wczytywany jako 0.
  • #9 7726189
    pepitto
    Poziom 18  
    Może to i dziwne, ale zmiana konfiguracji programu zgodnie ze wskazówkami alien_audio przyniosła oczekiwane rezultaty.


    Dzięki panowie.
REKLAMA