- LiFePO4 Speicher Test         
Ergebnis 1 bis 10 von 14

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

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.07.2004
    Beiträge
    582

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

    Guten Morgen,

    ich beschäftige mich mit dem Senden von Daten zwischen zwei ATMega8.
    Ich habe den Quelltext jetzt nicht hier, den liefere ich nach.

    Ich arbeite mir config serialin und serialout.
    Versuche also so zu arbeiten, dass ich den Chip nicht durch warten auf Empfang blockiere.

    Die beiden Programme sind komplett identisch. Nur der eine Chip sendet als Auslöser der Kommunikation eine "0".

    Der Ablauf ist wie folgt:
    Chip1 sendet eine "0".
    Chip2 wartet auf einen String.
    In der Interrupt Routine wird eine flag gesetzt, dass ein String empfangen wurde, gleichzeitig wird der Inhalt des Puffers in eine Variable geschrieben.
    Beim nächsten Durchlauf der Hauptschleife wird geprüft ob ein String empfangen wurde, wenn ja wird der String mit Val() in eine Integer umgewandelt, eine 1 hinzugerechnet und mit print an Chip1 zurückgesandt.
    Es erfolgt eine Ausgabe des empfangenen und des gesendeten Strings auf einem LCD.
    Das gleiche passiert dann auf Chip1.
    Theoretisch sollten sich die beiden Chips einen immer um 1 erhöhten Wert zusenden.

    Jetzt tritt aber folgendes auf:
    Der erste Versandt, und die Addition funktionieren dann allerdings wird dem String ein Zeichen vorangestellt (eins, oder mehrere, das weiß ich nicht): auf dem LCD wird es so ausgegeben ||| , dahinter steht dann noch eine 1.
    Die Ausgabe ist also |||1

    Wenn ich das ganze mit einem Computer und einem Chip mache funktioniert es einwandfrei!
    Es ist das selbe Programm auf dem Chip und ich sende per Hyperterminal eine Zahl, dann bekomme ich immer eine um 1 erhöhte zurück!!!


    Ich verstehe absolut nicht wo das Problem liegen könnte.
    Das ganze läuft auf 1Mhz ohne externen Quarz bei 4800Baut.

    danke für eure Hilfe!
    Quelltext folgt!

    Crypi

  2. #2
    Standardfrage: Hast du die RX/TX Leitungen vertauscht?

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    @sysrun: Das kann ja nicht die Ursache sein, er empfängt ja seine Strings.

    @jcrypter: Ohne dein Programm kann man nicht genau sagen, wo das Problem liegt. Ich nehme an, dass dies dadurch hervorgerufen wird, dass ein Teil des CR+LF noch in deinem String bleibt und dann auf dem LCD ausgegeben wird. Wahrscheinlich benutzt du Bytematch=10 oder =13, damit du nach dem Empfang in eine ISR springst.

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.07.2004
    Beiträge
    582
    Danke für die Antworten!
    Ein vertauschen der Leitung kann ich ausschließen!
    ja, ich nutze bytematch = 13.
    Ich vermute auch, dass etwas darin bleibt, aber wie behebe ich das?

    Quellcode folgt heute Abend!

    Crypi

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von HeXPloreR
    Registriert seit
    08.07.2008
    Ort
    Bad Bramstedt
    Alter
    45
    Beiträge
    1.369
    Hallo Crypi,

    benutze zum Empfang mal z.B. das Terminal von Br@y++.
    Dort kannst Du den Empfangen String genauer ansehen - ich habe den Bereich für Dich markiert in dem die info zu sehen sein sollte.

    Wenn es keine "1" oder "kleines l" kannes nur noch "vertical bar" sein...was auch immer das ist. Die Ascii Tabelle zeigt oben wie die Angaben zu lesen sind.

    Ich hoffe das hilft Dir etwas weiter.

    Ich vermute sonst noch das du das "nullzeichen" - also das nede vom String vielleicht mitwandelst? - vielleicht hilft es dem String die Null-Terminierung abzuschneiden und das dann in integer zu speichern?

    Klicke auf die Grafik für eine größere Ansicht

Name:	Terminal by Bray++.jpg
Hits:	14
Größe:	76,6 KB
ID:	25616

    oh sorry sehe grade Du sagst senden auf PC geht richtig ....

    ... aber die Variable muss ein LONG sein. Deshalb wird es wohl aufgefüllt.
    Geändert von HeXPloreR (28.05.2013 um 16:12 Uhr)

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.07.2004
    Beiträge
    582
    Hi Hexplorer,

    ich vermute, dass es die vertical bar ist.

    Gibts eine Methode die Nullterminierung zu entfernen?
    Ich habe via google nichts gefunden.

    Blöd wenn man nicht "am Gerät" sitzt ums auszuprobieren

    Crypi

  7. #7
    Erfahrener Benutzer Roboter Genie Avatar von HeXPloreR
    Registriert seit
    08.07.2008
    Ort
    Bad Bramstedt
    Alter
    45
    Beiträge
    1.369
    Kanns sein das Bascom das beim umwandeln schon macht - macht mehr sinn als das man es erst noch selbst machen muss - aber ich kann's nicht sagen
    ... aber die Variable muss ein LONG sein. Deshalb wird es wohl aufgefüllt.
    Probier das mal, laut Bascom hilfe zum serin.

    EDIT: Hat man sowas schon gesehen ... ein Bascom-Forum
    Geändert von HeXPloreR (28.05.2013 um 17:14 Uhr)

Ä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