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

Problemz Atmegą 32 i komunikacją z PC

gorsomir 30 Wrz 2009 18:08 1281 7
REKLAMA
  • #1 7075682
    gorsomir
    Poziom 13  
    Witam zbudowałem poniższy układ
    Problemz Atmegą 32 i komunikacją z PC

    Mam z nim kilka problemów
    mianowicie
    Atmega 2 (na schemacie 16) wysyła do PC i Atmegi 8 dane bez problemu
    Atmega 8 też odbiera dane bez problemu
    ale Wysyłanie danych z PC do atmegi 32 skutkuje niczym.
    Echo przed i za maxem jest więc tu problemu nie ma
    Wszystkie połączenia też raczej są w porządku (sprawdzona ciągłość obwodu)
    Co ciekawe czego też nie rozumiem, Po odłączeniu Atmegi 8 cała komunikacja z PC siada
    Nawet nie dostaje śmieci
    Program jest napisany w bascomie z taką konfiguracją
    $crystal = 8000000
    Config Com1 = Dummy = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0       'konfiguracja portu COM
    $baud = 1200

    Proszę o pomoc w rozwiązaniu tego problemu i pozdrawiam
  • REKLAMA
  • #2 7075720
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #3 7075744
    gorsomir
    Poziom 13  
    ten kawałek kodu to akurat jest taki sam w obu procesorkach
    na obu też używam generator RC oczywiście wszystkie fuse byty są ustawione prawidłowo

    Oczywiście w najgorszym wypadku przestawie się na kwarc ale przecierz jak by to była wina RC to z wysyłaniem też by miał problemy a to akurat wychodzi mu pięknie
  • #4 7075817
    Konto nie istnieje
    Poziom 1  
  • #5 7075827
    alien_audio
    Poziom 21  
    Witam.
    Prawdopodobnie problem jest w obsłudze drugiego portu RS.
    Podaj kod źródłowy jak obsługujesz ten port do odczytu i zapisu.
    Należy utworzyć bufor do odczytu z RS drugiego , włączyć przerwania. Dopiero z bufora będziesz mógł odczytać.
  • REKLAMA
  • #6 7075893
    gorsomir
    Poziom 13  
    Oto kod dla Atmegi 32
    
    $regfile = "m32def.dat"
    '$lib "mcsbyte.lbx"
    $crystal = 8000000
    Config Com1 = Dummy = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0       'konfiguracja portu COM
    $baud = 1200
    Config Portb.3 = Output
    Config Portb.2 = Output
    Config Portb.1 = Output
    Config Portb.0 = Output
    Dim Xer As Integer
    Dim Temp As Integer
    Enable Interrupts
    Dim B As Byte
    Dim S As String * 15
    Lpp Alias Portb.0                                           'Lampa Przednia Prawa
    Lpl Alias Portb.1
    Ledy Alias Portb.3                                          'Lampa Przednia Lewa
    Enable Serial
    Echo On
    Temp = 0
    Lpp = 0
    Lpl = 0
    Do
    Print "@TMP" ; Temp ; "#"
    Print "@PRZ" ; Lpp ; Lpl ; "#"
    Print "@Podaj polecenie#"
    Temp = Temp + 1
    Waitms 20
    B = Inkey()
    Waitms 20
    If B = "l" Then
     Lpl = 0
     Print "@LPL ON#"
    End If
    If B = "p" Then
     Lpp = 0
     Print "@LPP ON#"
    End If
    If B = "L" Then                                           
     Lpl = 1
     Print "@LPL OFF#"
    End If
    If B = "P" Then
     Lpp = 1
     Print "@LPP OFF#"
    End If
    Sound Ledy , 100 , 600
    Waitms 100
    Print "@------------------#"
    Input "Podaj swoje imie " , S
    Print "Witaj " ; S
    Loop
    End
    

    a oto kod atmegi 8
    
    $regfile = "m8def.dat"
    '$lib "mcsbyte.lbx"
    $crystal = 8000000
    Config Com1 = Dummy = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0       'konfiguracja portu COM
    $baud = 1200
    'onfig Porta.0 = Output
    'Config Porta.1 = Output
    Config Portd.3 = Output
    Config Portd.2 = Output
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 1
    Enable Interrupts                                           'włączenie przerwań
    Dim Speed As Integer
    Dim Xer As Integer
    Dim B As Byte
    Declare Sub S1prawo
    Declare Sub S1lewo
    Declare Sub S1stop
    Declare Sub S2prawo
    Declare Sub S2lewo
    Declare Sub S2stop
    Declare Sub S3prawo
    Declare Sub S3lewo
    Declare Sub S3stop
    Declare Sub S4prawo
    Declare Sub S4lewo
    Declare Sub S4stop
    'Speaker Alias Pind.6
    'Ledlcd Alias Porta.0
    'Ledblue Alias Porta.1
    Led1 Alias Portd.2
    Led2 Alias Portd.3
    Led1 = 1
    Speed = 255                                                 'prędkośc na maksa
    Do
    B = Inkey()
    If B = "@" Then
    For Xer = 18 To 1 Step - 1
    Led1 = 1
    Waitms Xer
    Led1 = 0
    Waitms Xer
    Led1 = 1
    Waitms Xer
    Led1 = 0
    Waitms Xer
    Led1 = 1
    Waitms Xer
    Next
    End If
    If B = "a" Then
    S1prawo
    End If
    If B = "b" Then
    S1lewo
    End If
    If B = "c" Then
    S1stop
    End If
    If B = "d" Then
    S2prawo
    End If
    If B = "e" Then
    S2lewo
    End If
    If B = "f" Then
    S2stop
    End If
    If B = "g" Then
    S3prawo
    End If
    If B = "h" Then
    S3lewo
    End If
    If B = "i" Then
    S3stop
    End If
    If B = "j" Then
    S4prawo
    End If
    If B = "k" Then
    S4lewo
    End If
    If B = "l" Then
    S4stop
    End If
    
    Led2 = 0
    Waitms 50
    Led2 = 1
    Waitms 50
    Sound Led2 , 100 , 600
    Waitms 50
    Led2 = 1
    Waitms 100
    For Xer = 18 To 1 Step - 1
    Led2 = 1
    Waitms Xer
    Led2 = 0
    Waitms Xer
    Led2 = 1
    Waitms Xer
    Led2 = 0
    Waitms Xer
    Next
    Loop
    End
    Sub S1prawo
    Pwm1a = Speed
        Set Portb.6
        Reset Portb.7
    End Sub
    Sub S1lewo
    Pwm1a = Speed
        Reset Portb.6
        Set Portb.7
    End Sub
    Sub S1stop
    Pwm1a = Speed
        Reset Portb.6
        Reset Portb.7
    End Sub
    Sub S2prawo
    Pwm1b = Speed
        Set Portb.6
        Reset Portb.7
    End Sub
    Sub S2lewo
    Pwm1b = Speed
        Reset Portb.6
        Set Portb.7
    End Sub
    Sub S2stop
    Pwm1b = Speed
        Reset Portb.6
        Reset Portb.7
    End Sub
    Sub S3prawo
    Pwm1a = Speed
        Set Portb.6
        Reset Portb.7
    End Sub
    Sub S3lewo
    Pwm1a = Speed
        Reset Portb.6
        Set Portb.7
    End Sub
    Sub S3stop
    Pwm1a = Speed
        Reset Portb.6
        Reset Portb.7
    End Sub
    Sub S4prawo
    Pwm1a = Speed
        Set Portb.6
        Reset Portb.7
    End Sub
    Sub S4lewo
    Pwm1a = Speed
        Reset Portb.6
        Set Portb.7
    End Sub
    Sub S4stop
    Pwm1a = Speed
        Reset Portb.6
        Reset Portb.7
    End Sub
    

    Jeśli chodzi o schemat to takowego nie posiadam ale narysuje za chwile
    Ale raczej nie ma tam żadnych udziwnień

    Zauważyłem też dopiero teraz że po wypisani procedury Input w terminalu na PC oprócz
     Podaj swoje imie 

    pojawia się jeszcze
  • #7 7076309
    alien_audio
    Poziom 21  
    Witam.
    Być może terminal komputera nie wysyła znaku CR na który czeka instrukcja INPUT. Proponuje na początek wyremować całość zostawić tylko w pętli instrukcje

    do
    Print "@------------------#"
    Input "Podaj swoje imie " , S
    Print "Witaj " ; S
    Loop

    Sprawdź czy to zachowa sie prawidłowo?
  • REKLAMA
  • #8 7079295
    gorsomir
    Poziom 13  
    Witam wygląda na to że już wszystko działa
    Nadal nie wiem co było przyczyną takiego zachowania ale jak uruchomiłem wszystko dzisiaj rano to ruszyło jak trzea
    Dlatego porzepraszam za kłopot
    Pozdrawiam
REKLAMA