- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 5 von 5

Thema: Fehler bei der Seriellen übertragung

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    14.12.2003
    Ort
    Bad Krozingen
    Alter
    41
    Beiträge
    125

    Fehler bei der Seriellen übertragung

    Anzeige

    Praxistest und DIY Projekte
    Hi Leute..ich hab hiuer grad nen mega16 als hauptprozzi und nen mega8 auf nem motortreiber...

    ich will es so machen, dass ich vom mega16 nen wert von -1023 bis 1023 sende und die brücke dementsprechend drauf reagiert und links oder rechts fährt, abhängig von der zahl wird die pwm reguliert.

    Jetzt mal das sendeproggi:

    Code:
    $crystal = 16000000
    $baud = 19200
    
    Dim C As Integer
    
    Open "Comd.3:19200,8,n,1" For Output As #1
    Do
    For C = -1023 To 1023 Step 1
    Print #1 , C
    'Lcd C
    Waitms 400
    Next
    Loop
    
    End
    das sendet alle 400ms ne andere zahl

    jetzt will ich das hiermit erkennen und gegebenenfalls drauf reagieren

    Code:
    $crystal = 16000000
    $baud = 19200
    
    Config Pinb.1 = Output
    Config Pinb.2 = Output
    
    Config Pind.5 = Output
    Config Pind.6 = Output
    Config Pind.7 = Output
    
    Dim C As Integer
    Dim A As Integer
    
    
    Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 8
    
    Enable Interrupts
    
    Open "Comc.3:19200,8,n,1" For Output As #1
    
    Do
    Input C
    Waitms 100
    Print #1 , C
    Loop
    Close #1
    
    Links:
    Pwm1a = 0
    Pwm1b = C
    Return
    
    Rechts:
    A = C * -1
    Pwm1a = A
    Pwm1b = 0
    Return
    
    Stopp:
    Pwm1a = 0
    Pwm1b = 0
    Return
    
    End
    das ganze funkt über ne softwareserielle über den m16 und geht in die hardwareserielle des motortreibers, da hab ich dann noch ne softwareserielle um das was der treiber empfängt aufm terminal darzustellen...leider kommt wenn ich den bot anschalte immer nur die erste zahl an (-1023) danach 000000000 usw.

    weiss jemand hilfe?? was mach ich falsch?


    Gruss Stefan

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Beiträge
    2.731
    Hallo,
    hast Du die ausgabe von ersten µC schon mal mit einem Terminal kontrolliert was da raus kommt ?

    Im 2. Teil macht Du nach jedem Zeichen einlesen eine Pause, dH. der µC kommt da scheinbar nicht ganz mit mit den Zeichen die vom anderen µC gesendet werden, wenn das alle 400ms gesendet wird (CR-LF nicht vergessen !).

    Hänge den ersten µC erst an ein Terminal, damit Du siehst wie das mit der Übertragung läuft, danach kannst Du die Verarbeitung drauf abstimmen (String -> Zahl).
    mfG

  3. #3
    Gast
    jopp..ich krieg super Zahlen aufm terminal...

    Kann den Mega (motortreiber) aber auch mit dem terminal steuern..funzt auch alles soweit..nur mega16 zu mega 8 klappt nicht...

    gruss stefan

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    14.12.2003
    Ort
    Bad Krozingen
    Alter
    41
    Beiträge
    125
    Hi Leute...

    Neuer versuch, neues Glück...
    Die Brücke funktioniert 1A..ich sende meine Befehle vom Mega16 Hardware UART an die Brücke (Mega Software UART...alles funktioniert bestens und sie macht was ich will....

    Sobald ich aber umstelle und an die Hardware UART senden will, gehts nicht mehr...und ich weiss nicht warum..hir mal die proggis..

    Sender:
    Code:
    $regfile = "m16def.dat"
    $crystal = 16000000
    $baud = 19200
    
    
    
    Enable Interrupts
    Dim I As Integer
    
    Do
    For I = -1020 To 1020 Step 10
    Print I
    Waitms 10
    Next
    For I = 1020 To -1020 Step -10
    Print I
    Waitms 10
    Next
    Loop
    
    End

    Empfänger (Brücke):
    Code:
    $regfile = "m8def.dat"
    $crystal = 16000000
    $baud = 19200
    
    Config Pinb.1 = Output
    Config Pinb.2 = Output
    
    Config Pind.5 = Output
    Config Pind.6 = Output
    Config Pind.7 = Output
    Enable Interrupts
    
    Dim A As Word
    Dim I As Integer
    
    Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 8
    Open "Comc.3:19200,8,n,1" For Input As #1
    
    
    
    
    Do
    Input #1 , I
    Print I
    Select Case I
    Case Is > 0 : Gosub Rechts
    Case 0 : Gosub Stopp
    Case Is < 0 : Gosub Links
    End Select
    Loop
    
    
    Links:
    A = I * -1
    Pwm1a = 0
    Pwm1b = A
    Return
    
    Rechts:
    Pwm1a = I
    Pwm1b = 0
    Return
    
    Stopp:
    
    Pwm1a = 0
    Pwm1b = 0
    Return
    
    
    End
    Das tritt bei beiden H-brücken auf, also geh ich davon aus, dass keiner der Mega8 kaputt ist...

    Hoffe ihr könnt mir helfen..


    Gruss Stefan

  5. #5
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Ich würd sicherheitshalber mal
    config serialin=buffered, size=64 ' schätzwert
    oben einfügen. dadurch empfängt er mit Interrupt in dem Buffer, und es ist weniger kritisch, ob du grad bei "input" oder woanders (und nicht empfangsbereit) bist.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Solar Speicher und Akkus Tests