Hallo,
ich nutze einen EFM8 von Silabs und möchte mit meinem Code einen
dreistelligen Integer über den UART empfangen und aufs 7-Segment Display
ausgeben.
Der Ablauf soll in etwa so aussehen:
-Start: 000 (Display) in Schleife
- irgendwann dreistelligen Integer übergeben (momentan via Terminal
TeraTerm, später über den UART TX eines zweiten Mikrocontrollers)
- erst wenn alle 3 Ziffern erhalten wurden, soll die aktualisierte
Ausgabe aufs Display erfolgen. Beim Terminal würde ich gerne mit Enter
bestätigen müssen.
- diese Ausgabe dann wieder in Schleife, bis ein neuer Wert empfangen
wird
Schritt 1 funktioniert soweit. Wenn ich aber jetzt 3 Zahlen eingebe,
tätigt er bei jeder Zahl eine Ausgabe ans Display, und nach der dritten
Zahl steht obendrein nur [] [] 0 auf dem Display, was vermutlich der ISR
zugrunde liegt. Hat jemand eine Idee, wie ich es hinbekomme, dass nur
das dreistellige Paket "gesendet" und korrekt angezeigt wird? Danke &
sorry für noch unausgereifte Codesegmente.
Grüße
HalloZusammen schrieb:> ich nutze einen EFM8 von Silabs und möchte mit meinem Code einen> dreistelligen Integer über den UART empfangen und aufs 7-Segment Display> ausgeben.
Dann tu es doch einfach!
Und wenn du das nicht aus eigener Kraft kannst, dann lerne zuvörderst
das Programmieren.
Du wirst in deinem Leben nichts programmieren können, wenn du nicht
zuvor das Programmieren erlernt hast. Das sollte doch klar sein.
Nochwas:
Zum Benutzen eines EFM8 oder irgend eines anderen elektronischen
Bauteils sollte man zuvörderst soviel schaltungstechnik erlernt haben,
daß man mit den gewählten Bauelementen tatsächlich umgehen kann.
Das ist _"essenziell"_ (um Sherlock Holmes mal einzudeutschen)
W.S.
HalloZusammen schrieb im Beitrag #5767048 // Read a
character from UART
>> if (UART_Buffer_Size < UART_BUFFERSIZE)> {> UART_Buffer[UART_Input_First] = Byte; // Store in array>> UART_Buffer_Size++; // Update array's size>> UART_Input_First++; // Update counter> }> }> if(UART_Buffer_Size>2)> {> UART_Buffer_Size = 0; //reset counters> UART_Input_First = 0;> start = 1; //leave start mode>> }> }
Ja, du darfst erst senden, wenn alle Zeichen vorhanden sind.
Also das letzte Zeichen Enter prüfen!
> Ja, du darfst erst senden, wenn alle Zeichen vorhanden sind.> Also das letzte Zeichen Enter prüfen!
Hab das mal in der ASCII Tabelle gesucht. Also meinst du, es muss der
Carriage Return als viertes Zeichen noch übergeben werden? Danke!
W.S. schrieb:> HalloZusammen schrieb:>> ich nutze einen EFM8 von Silabs und möchte mit meinem Code einen>> dreistelligen Integer über den UART empfangen und aufs 7-Segment Display>> ausgeben.>> Dann tu es doch einfach!>> Und wenn du das nicht aus eigener Kraft kannst, dann lerne zuvörderst> das Programmieren.>> Du wirst in deinem Leben nichts programmieren können, wenn du nicht> zuvor das Programmieren erlernt hast. Das sollte doch klar sein.>> Nochwas:> Zum Benutzen eines EFM8 oder irgend eines anderen elektronischen> Bauteils sollte man zuvörderst soviel schaltungstechnik erlernt haben,> daß man mit den gewählten Bauelementen tatsächlich umgehen kann.>> Das ist _"essenziell"_ (um Sherlock Holmes mal einzudeutschen)>> W.S.
Eine Antwort zur Sache hätte auch gereicht, aber hier im Forum geht es
ja bekanntlich nicht ohne.
Ich lerne schon seit relativ langer Zeit das Programmieren und versuche
mich an Beispielen, aber wenn dann irgendwann einmal ein Brett vorm Kopf
ist, erweitere ich hin und wieder legitimerweise mein Wissen durch das
anderer, die schon ähnliche Projekte umgesetzt haben.
HalloZusammen schrieb:> Eine Antwort zur Sache hätte auch gereicht,
Das war eine Antwort zur Sache!
Du kannst nämlich noch immer nicht programmieren, wie du deutlich im
Eröffnungspost dargestellt hast. Programmieren heißt nicht, irgendwelche
Ausdrücke in irgend einer Programmiersprache hinzuschreiben, sondern
Programmieren heißt, Software zu planen - und das möglichst richtig.
Stattdessen hast du einfach geradeaus drauflos gewurstelt ("Der Ablauf
soll in etwa so aussehen...")
Ja, ich weiß, systematisch vorzugehen und nicht wie ein Floh
herumzuhüpfen, ist zum Anfang vielen Leuten eher lästig. Die wollen
schon mal das Dach sehen, ohne die Mauern drunter und auch ohne das
Fundament.
Also der Reihe nach:
1. lernen und dann tun, wie man den Chip sinnvoll aufsetzt. Also wie man
den Pins des Chips die zuvor geplante Funktion zuweist und wie man den
Takt des Ganzen aufsetzt und wie man die benötigten Peripherieteile mit
selbigem versorgt.
2. lernen und dann tun, wie man für die nötigsten Peripherien passende
Lowlevel-Treiber konzipiert. Für die serielle Kommunikation per UART
oder USART eben einen Treiber, der zu sendende Daten so behandelt, daß
man sich aus höheren Programmschichten nicht mehr um deren Details
kümmern muß. Also zwischenspeichern, per Interrupt senden - und das
Gleiche für den Empfangstrakt.
3. lernen und dann tun, wie man Struktur in serielle Kommunikationen
hineinkriegt. Also entweder ein Kommandoprogramm, das ankommende Zeichen
zu einer Kommandozeile auflaufen läßt und echot und dann beim Zeilenende
(CR) selbige auswertet - oder für Maschinenzwecke ein anderes Verfahren,
das so gestaltet ist, daß es selbstsynchronisierend funktioniert.
4. lernen und dann tun, wie man eine Anzeige aus 7 Segment-Elementen
ansteuert und benutzt.
So herum wird das was, und du lernst dabei auch, systematisch
vorzugehen.
W.S.
HalloZusammen schrieb:> Ja, du darfst erst senden, wenn alle Zeichen vorhanden sind.> Also das letzte Zeichen Enter prüfen!>> Hab das mal in der ASCII Tabelle gesucht. Also meinst du, es muss der> Carriage Return als viertes Zeichen noch übergeben werden? Danke!
Für das was du vorhast reichts.
Du brauchst ein array der länge 5 inkl /0
Du machst eine Schleife und scannst die Zeichen.
Überpruefst ob auch als char 0-9 eingegeben wurde.
Wenn ja Eintrag in Array, sonst ignorieren.
Wenn alle Zeichen da sind, schaust du ob das letzte Zeichen den Wert von
CR hat.
Wenn ja Daten in Array schicken.
Einfaches Programm keine Hexerei.
HalloZusammen schrieb:>>> Hab das mal in der ASCII Tabelle gesucht. Also meinst du, es muss der> Carriage Return als viertes Zeichen noch übergeben werden? Danke!
Für das was du vorhast reichts.
Du brauchst ein array der länge 5 inkl /0
Du machst eine Schleife und scannst die Zeichen.
Überpruefst ob auch als char 0-9 eingegeben wurde.
Wenn ja Eintrag in Array, sonst ignorieren.
Wenn alle Zeichen da sind, schaust du ob das letzte Zeichen den Wert von
CR hat.
Wenn ja Daten in Array schicken.
Einfaches Programm keine Hexerei.