-         

Ergebnis 1 bis 5 von 5

Thema: uart interrupt routine

  1. #1

    uart interrupt routine

    Anzeige

    Hallo zusammen,

    nach etlichen Jahren habe ich wieder begonnen ein Programmierprojekt umzusetzen.
    Kurz worum es geht:
    Meine Jungs haben eine digitale Autorennbahn, welche einen Aux-port hat, welcher etliche Informationen zur Verfügung stellt.

    Ich bin nun dabei, für die Rennbahn eine Startampel, Rundenanzeigeturm (7-Segement) und Großbildschirme (LCD-Display) zu bauen.
    Vom Grundkonzept liest der Mainmicrocontroller (Mega8515) die Daten von der Rennbahn und verteilt diese dann über RS232 an die inteligenten Pheripherieeinheiten (Mega13, Mega.
    Alle Microcontroller werden mit Quarzen (12MHz) befeuert und ich setze den Bascom Compiler ein.
    Für die Kommunikation habe ich mit ein 9 Byte langes Protokoll erstellt, wobei ein Startbyte und am Ende ein Prüfsumme übertragen werden sollen. Prüfsumme ist noch nicht umgesetzt, da die grundsätzlich Kommunikation nicht funktioniert. Alle Empfangsroutinen sollten mittels HW UART und Interrupt Serviceroutinen arbeiten.
    Dazu habe ich mir zwei Testprogramme geschrieben bei welchen ich das austesten möchte. Ein Microcontroller sendet permanent, während der andere die Bytes empfangen sollte, auswerten und an den PC weitersenden.
    Leider geht das nicht so wie ich mir das vorstelle, vielleicht kann mir jemand einen Tipp geben was ich falsch mache. Habe schon einige Tage jetzt mit diesem Kommunikationsproblem verbracht.

    Leider hat die Suche auch nicht den erwarteten Erfolg gebracht. Habe schon etliche Beispielprogramme durchgesehen und mein Buch gibt auch nichts mehr her was weiterhilft - please help me

    Anbei meine Testprogramme:
    Angehängte Dateien Angehängte Dateien

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Hallo,
    was mir als erstes Auffällt, Du arbeitest mit Software UART, damit schauts dann mit Interrupts schlecht aus !
    Interrupts kann nur die HardwareUART generieren.

    Wie hast Du die RS232-Verkabelung zwischen den Megas gebaut, evtl. gibts da noch ein Hardwareproblem ?!
    Was ist wo bei wem angeschlossen (nur was RS232 betrifft) ?

  3. #3
    Ich habe einen Mega8 im STK500 (Empfänger) welcher RXD (PD0, Pin2) die Daten empfängt und dann auf einem Software UART wieder sendet (Comd.5). Der Sender ist auf einem Testboard aufgebaut und dort sende ich definitiv mit einem Software UART auf comd.7. Wenn ich den Ausgang von Sender direkt ans PC Terminalprogramm sende, dann kommt alles richtig an. Sobald ich den zweiten Mega8 dazwischenhänge gehts nicht mehr.
    Ich möchte/muß nach meinem derzeitigen Wissensstand alle Empfänger mit HW Uart/Interrupt arbeiten lassen, da ich keinen Datenverlust zulassen kann.
    Der Mainmicrocontroller muß mit 38400 Baud die Daten von der Rennbahn empfangen und anschließend auf alle Peripheriemegas verteilen.
    Die eigentlichen Berechnungen lasse ich dann in den einzelen Peripheriemegas durchführen (Rundenzählen für jeders Auto, Zeitberechnungen und die Anzeigeelemente steuern).

    Vorrangig muß ich aber mein Kommunikationsproblem lösen, damit die richtigen Daten beim richtigen Peripherieteil ankommen.

    In meiner Testumgebung verbinde ich die Mega8 über Drahtbrücken - das sollte eigenlich funktionieren, da am PC bei weglassen des Empfangsmega der gleich Signalweg funktioniert.

    Also die Signalwege würde ich nach derzeitigem Wissenstand ausschließen, den es werden definitiv Daten gesendet und empfangen - das Problem besteht nur darin sie richtig zu empfangen, alle 9 Byte einen Protokollstreams!!!

    Ohne Interrupts glaube ich das ich die Empfangsroutienen nicht lösen kann.

    lg.
    gerhard

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Ich weiss jetzt nicht ob wir da teilweise aneinander vorbeireden,
    was ich oben meinte, bei SoftwareUART gibts einfach keine Interrupts !

    Wenn die einzelnen Megas per HW-UART empfangen ist das OK so, evtl. wird aber die SoftwareUART gestört, wenn ein IRQ der HW-UART auftritt.

    Was ich grad noch gefunden habe, in einem Testprogramm wird Rx_complete ausgewertet auf 1, das wird aber nie auf 1 gesetzt, deswegen macht es dann auch nicht sonderlich viel !

    Wie das Hardwaremässig zusammenhängt kann ich mir immer noch nicht so ganz vorstellen, sind da auch mehrere Controller auf der gleichen Rx- oder Tx-Leitung, oder hat jeder seine eingene ?

    Wenn sonst keinem hier was einfällt, kannst Du evtl. das mal kurz aufmalen wo welche Leitung hingeht, und wo HW- und software UART ist !?

  5. #5
    Ich habe ein kleine Skizze angefertig, aus welcher vielleicht etwas genauer mein Ansatz hervorkommt.

    Der Maincontroller hat nur die Aufgabe die Infos von der Bahn empfangen (mittels HW UART -Interrupt) und anschließend an die entsprechenden Periperiercontroller mittels SW UART zu senden.

    Die Periperiecontroller empfangen mittels HW-Uart - (Interrupt), machen die entsprechenden Berechnungen und bringen diese zur Anzeige oder was auch immer zu tun ist.

    Wie leicht hilft die Zeichnung, wobei bitte die Ports nur plakativ zu verstehen sind.

    lg.
    gerhard
    Angehängte Dateien Angehängte Dateien

Berechtigungen

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