- 3D-Druck Einstieg und Tipps         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 14 von 14

Thema: UART senden zwischen zwei ATMega8: ||| wird String vorangestellt

  1. #11
    Erfahrener Benutzer Roboter Genie Avatar von HeXPloreR
    Registriert seit
    08.07.2008
    Ort
    Bad Bramstedt
    Alter
    45
    Beiträge
    1.369
    Anzeige

    Powerstation Test
    Ja, sorry....wollte eigentlich kompett löschen da ich Dir eher ungenügend helfen kann, aber dann habe ich gesehen das Du schon wieder drin bist und habe sinngemäss wieder geschrieben.

    EDIT: wenn du eine 12 vom terminal sendest kommt eine 13 zurück? sendest du eine 13 kommt eine 14 zurück?

    Nimm mal das datenempfangen komplett raus-ich denke laut dem Teil 2 von Gerold passt es nicht so gut rein. Und ändere incoming_data zu string*30
    Geändert von HeXPloreR (28.05.2013 um 21:11 Uhr)

  2. #12
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.07.2004
    Beiträge
    582
    Ja, vom Computer aus funktioniert es genau wie es soll!

    - - - Aktualisiert - - -

    Soooooooooooooooooooooooooooooooooo erstmal geschafft!!!


    für alle: wenn man UART über Interrups also config serialin / config serialout nutzen will, dann muss man sich offenbar doch um den Puffer kümmern!
    Zumindest um serialin!
    Es ist notwendig diesen zu leeren!
    Warum Bascom das nicht selber macht, weiß ich nicht, dafür reicht mein Verständnis nicht.
    Ob es sich bei serialout als notwenidig erweisen wird, weiß ich noch nicht. Bisher geht es ohne.

    Das clear serialin, an der richtigen Stellen, nämlich nicht in der ISR, hat dafür gesorgt, dass es jetzt geht.

    Meine Lösung für eine einfache Kommunikation zwischen zwei Microcontrollern oder einem und einem Computer:
    Code:
    $regfile = "m8adef.dat"
    $framesize = 32
    $swstack = 32
    $hwstack = 32
    $crystal = 1000000
    
    $baud = 4800
    
    Declare Sub Serial0charmatch()
    
    Config Serialin = Buffered , Size = 30 , Bytematch = 13
    Config Serialout = Buffered , Size = 30
    Enable Interrupts
    
    Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , _
       Db7 = Portd.7 , E = Portd.3 , Rs = Portb.6
    Config Lcd = 16 * 1a
    
    Dim Empfangenedaten As Long
    Dim Umrechnen As Long
    Dim Datenempfangen As Long
    
    
    Cls
    Lcd "start"
    Empfangenedaten = 10
    Datenempfangen = 0
    
    
    'als Start der KOmmunikation muss ein Chip die ersten Daten schicken, etwas Wartezeit, um sicher zustellen, das beide Chips laufen
    Waitms 1000                                                 ' beim zweiten chip auskommentieren
    Print Empfangenedaten                                       ' beim zweiten chip auskommentieren
    
    
    Do
         If Datenempfangen = 1 Then                             'nur wenn Daten empfangen wurden, wird etwas damit getan
           Waitms 1000
           Cls
           Lcd Empfangenedaten                                  'die Daten werden unverändert auf einem LCD ausgegeben
    
           Umrechnen = Empfangenedaten + 1
           Print Umrechnen                                      ' die veränderten Daten werden zurückgeschickt
           Lcd Umrechnen
    
           Datenempfangen = 0
           Clear Serialin                                       'der empfangspuffer muss geleert werden
         End If
    
    Loop
    End
    
    
    Sub Serial0charmatch()
       Local Incoming_data As Long
       Input Incoming_data Noecho
    
       Empfangenedaten = Incoming_data
       Datenempfangen = 1                                       'hinweis: es wurden daten empfangen, tue etwas
    
    End Sub
    
    
    End

    Dieser Code tut nichts anderes als eine jeweils um 1 erhöhte Zahl zwischen zwei Chips hin und her zu schicken.


    danke für all eure Hilfe!
    Wenn ich nichts übersehen habe, war es das erstmal
    Vielleicht hilft dies ja dem einen oder anderen.

    edit: soviel zu "ich mach heute noch sport.. muss nur kurz das problemchen lösen"

    Crypi

  3. #13
    Erfahrener Benutzer Roboter Genie Avatar von HeXPloreR
    Registriert seit
    08.07.2008
    Ort
    Bad Bramstedt
    Alter
    45
    Beiträge
    1.369
    Mir ist noch eingefallen wenn Du mit Bytematch = 13 (Eingabe/enter) arbeitest, dann müsstest du das auch mitsenden.
    Ich würde bei eine µC<>µC Kommunikation vielleicht "Inkey" nehmen. Und vielleicht eine LED an jeden µC zur Kontrolle togglen lassen -falls man keine wzei LCD's hat.

  4. #14
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.07.2004
    Beiträge
    582
    Moin,

    bytematch = 13 reagiert auf carriage return, als CR

    Dieser Code

    PRINT "Hallo Welt!"

    übermittelt die Zeichenfolge "Hallo Welt!" und fügt die unsichtbaren Zeichen CR und LF an.
    http://halvar.at/elektronik/kleiner_..._vom_computer/

    Das CR wird also bei jedem print sowieso mit angehängt.
    Darum muss ich mich nicht kümmern.

    Ich bevorzuge diese Lösung:
    - ich kann sicher sein, dass meine Nachricht komplett angekommen ist, da CR angekommen ist und nur dann die ISR aufgerufen wird
    - ich blockiere die Hauptschleife nicht durch das warten auf Nachrichten

    Wie störanfällig das ganze ist, kann ich überhaupt nicht beurteilen aber im jetzigen Zustand funktioniert es hervorragend.

    Crypi

Seite 2 von 2 ErsteErste 12

Ähnliche Themen

  1. UART String senden
    Von hacker im Forum C - Programmierung (GCC u.a.)
    Antworten: 13
    Letzter Beitrag: 20.03.2009, 15:42
  2. Uart zwischen zwei Megas klemmt - - wieder einmal
    Von Murus im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 7
    Letzter Beitrag: 06.05.2007, 16:12
  3. UART String bzw. Variable senden funktioniert nicht
    Von BlueVenom im Forum C - Programmierung (GCC u.a.)
    Antworten: 5
    Letzter Beitrag: 05.03.2007, 11:21
  4. Antworten: 21
    Letzter Beitrag: 12.02.2007, 13:41
  5. UART Umschalten zwischen zwei ATMEGA, geht das so:
    Von boeseTURBO-CT im Forum AVR Hardwarethemen
    Antworten: 6
    Letzter Beitrag: 27.07.2004, 17:26

Berechtigungen

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

Solar Speicher und Akkus Tests