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

Program działa w symulatorze ale nie działa po wgraniu do uC

hanibal0 21 Gru 2010 21:44 1460 11
REKLAMA
  • #1 8897970
    hanibal0
    Poziom 11  
    Program działa jak należy w symulatorze, jednak nie działa po wgraniu do procesora, procesor na pewno jest dobry (testowałem na 2 szt).
    Proszę kogoś o sprawdzenie kodu i wskazaniu błędu.

    $regfile "attiny2313.dat"
    
    
    Config Portb.0 = Input
    P1 Alias Pinb.0
    P1 = 1
    
    Config Portb.1 = Input
    P2 Alias Pinb.1
    P2 = 1
    
    Config Portb.4 = Output
    Dioda Alias Pinb.4
    Dioda = 0
    
    Do
       Debounce P1 , 0 , Pr1 , Sub
       Debounce P2 , 0 , Pr2 , Sub
    Loop
    
    
    Pr1:
    
       If Dioda = 0 Then
          Waitms 1
             Set Dioda
                Return
       Else
          Reset Dioda
          Return
       End If
    
    
    Pr2:
       If Dioda = 0 Then
          Set Dioda
             Waitms 50
          Reset Dioda
       Return
    Else
       Return
    End If
    
    
    End
  • REKLAMA
  • REKLAMA
  • #3 8898045
    hanibal0
    Poziom 11  
    Józef18 napisał:
    A gdzie informacja o rezonatorze ?
    przez polecenie $crystal


    Pozdrawiam
    Józef


    wiem, wiem jednak jestem początkujący i mam powody żeby nie używać crystal, dopisuję tą informację na samym końcu już działającego programu. Uczę się na różnych prockach i kiedyś przez pomyłkę zaprogramowałem atmega8 z crystal 4000000 i teraz siedzi w szafce.
    Myślę że brak $crystal nie powoduje że program nie działa.
  • #4 8898254
    arktik1
    Poziom 27  
    Spróbuj tak:
    
    Config Portb = &B11111100
            Portb = &B00000011
    
    P1 Alias Pinb.0
    P2 Alias Pinb.1
    Dioda Alias Portb.4
    


    Dodano po 2 [minuty]:
    "przez pomyłkę zaprogramowałem atmega8 z crystal 4000000 i teraz siedzi w szafce. "
    A dla czego siedzi w szafce??
  • #5 8898305
    Vix
    Poziom 21  
    problem tkwi w tym , że nie określiłeś początkowego stanu portów tzn czy mają mieć stan niski czy wysoki, a od razu przeszedłeś do definiowania przyjaznych nazw. Moim zdaniem początek powinien wyglądać tak:
    Cytat:

    Config Portb = Input ' portb cały jako wyjście
    Portb = &B1111111 ' ustawiam stan wysoki na wszystkich portach

    P1 Alias Pinb.0 ' dopiero teraz przypisuje przyjazne nazwy
    P2 Alias Pinb.1
    Dioda Alias Pinb.4


    spróbuj ;)
  • REKLAMA
  • #6 8898322
    hanibal0
    Poziom 11  
    arktik1 napisał:
    Spróbuj tak:
    
    Config Portb = &B11111100
            Portb = &B00000011
    
    P1 Alias Pinb.0
    P2 Alias Pinb.1
    Dioda Alias Portb.4
    


    Dodano po 2 [minuty]:
    "przez pomyłkę zaprogramowałem atmega8 z crystal 4000000 i teraz siedzi w szafce. "
    A dla czego siedzi w szafce??


    DZIAŁA :D tylko teraz pytanie, dlaczego nie mogę konfigurować portów tak jak to zrobiłem w pierwszym poście? przecież teoretycznie konfiguracja jest taka sama?

    atmega8 siedzie w szafce bo nie umiem ustawić fuse bitów, to dla mnie za wysoka szkoła jak narazie :/

    Dodano po 3 [minuty]:

    Vix napisał:
    problem tkwi w tym , że nie określiłeś początkowego stanu portów tzn czy mają mieć stan niski czy wysoki, a od razu przeszedłeś do definiowania przyjaznych nazw. Moim zdaniem początek powinien wyglądać tak:
    Cytat:

    Config Portb = Input ' portb cały jako wyjście
    Portb = &B1111111 ' ustawiam stan wysoki na wszystkich portach

    P1 Alias Pinb.0 ' dopiero teraz przypisuje przyjazne nazwy
    P2 Alias Pinb.1
    Dioda Alias Pinb.4


    spróbuj ;)


    przecież określiłem zaraz po przypisaniu nazwy że stany na wejściach mają być wysokie (P1=1 i P2=1, dioda = 0). Nie mogę skorzystać z Twojego sposobu ponieważ w ten sposób musiałbym zadeklarować cały port jako wej lub wyj
  • #7 8898342
    Vix
    Poziom 21  
    Nie. Zapomniałeś o tym aby nadać początkowy stan tym portom. Nie główkowałem nad tym jakie stany będą Ciebie interesować, ale powinieneś je określić. Procesor nie wie podczas działania programu do jakiego stanu ma się odnosić, jaki porównywać, gdyż żadnego nie określiłeś.
  • #8 8898390
    hanibal0
    Poziom 11  
    Vix napisał:
    Nie. Zapomniałeś o tym aby nadać początkowy stan tym portom. Nie główkowałem nad tym jakie stany będą Ciebie interesować, ale powinieneś je określić. Procesor nie wie podczas działania programu do jakiego stanu ma się odnosić, jaki porównywać, gdyż żadnego nie określiłeś.


    ok zaczynam łapać o co chodzi, dzięki za zainteresowanie i pomoc!
    czyli takie rozwiązanie powinno być ok:
    Config Portb.0 = Input
    Portb.0 = 1
    Config Portb.1 = Input
    Portb.1 = 1
    Config Portb.4 = Output
    Portb.4 = 0
    
    
    P1 Alias Pinb.0
    P2 Alias Pinb.1
    Dioda Alias Portb.4


    idąc dalej napotkałem następny problem:
    Pr2:
       If Dioda = 0 Then
          For A = 1 To 10
             Set Dioda
                Waitms 50
             Reset Dioda
          Next
       Return
    Else
       Return
    End If


    dioda mrugnie raz i wraca do pętli do, a powinna mrugnąć 10x i wrócić
  • #9 8898420
    Vix
    Poziom 21  
    Dokładnie tak.
    Sprawę możesz uprościć.
    Cytat:
    Config Portb = &B00010000
    Portb = &B00010000
    P1 Alias Pinb.0
    P2 Alias Pinb.1
    Dioda Alias Portb.4


    w pętli FOR brakuje za komendą NEXT zmiennej A
    całość powinna wyglądać tak:
    Cytat:

    Pr2:
    If Dioda = 0 Then
    For A = 1 To 10
    Set Dioda
    Waitms 50
    Reset Dioda
    Next A ' brakujące A
    Return
    Else
    Return
    End If
  • #10 8898452
    hanibal0
    Poziom 11  
    wydaje mi się że jeśli jest jedna pętla for-next to nie nie jest wymagane A, może się mylę ale wydaje mi się że chyba zapomniałem dodać wait po reset dioda i nie widać kiedy ona gaśnie i się zaświeca, zaraz spróbuję zaprogramować

    ok działa ;)
  • REKLAMA
  • #12 8900588
    piotrva
    VIP Zasłużony dla elektroda
    
    Config PINx.y = Input/Output
    

    to poprawna składnia konfiguracji poszczególnych pinów w bascomie
    a więc:
    
    Config Pinb.1 = Input
    Config Pinb.0 = Input
    Config Pinb.2 = Output
    Config Portd = Output ' cały port jako wyjście
    Config Portd = Input ' cały port jako wejście
    ...
    
REKLAMA