Mein ziel ist es von einem Temperatur-Modul am Modul hängen 16 DS18S20, die Temperaturwerte werden 3stellig ausgegeben plus vorzeichen zb. + 16.3 Diese werte wollte ich nun über Uart einlesen und in einem Pointer speichern nur weiss ich noch nicht wie bin in C noch nicht so vielleicht kann mir von euch jemand ein kleinwenig hilfestellung geben. Als Controller hab ich ein Atmega128 mfg
Vorschlag: - mit ganzen Sätzen anfangen, bei deinem Text springen mir ja die Frösche aus dem Teich - C lernen (geht am PC einfacher) - dann wieder mit MC anfangen
so ich habs jetzt mal so versucht aber ich bekomme keine Anzeige auf meinem LCD. die Werte die vom Temperatu-Modul kommen sehen so aus +243 13 die 13 Bedeutet ende der Übertragung.
1 | for (;;) |
2 | {
|
3 | c = uart_getc(); |
4 | if( c != UART_NO_DATA ) |
5 | {
|
6 | // Lese solange, bis von der anderen Seite die
|
7 | // Return Taste betätigt wurde.
|
8 | while( c != 13 ) |
9 | {
|
10 | if( c != UART_NO_DATA ) { |
11 | Eingabe[Count++] = c; |
12 | c = uart_getc(); |
13 | }
|
14 | }
|
15 | |
16 | Eingabe[Count] = '\0'; |
17 | |
18 | uart_puts( "Temperatur" ); |
19 | uart_puts( Eingabe ); |
20 | uart_puts( " " ); |
21 | |
22 | }
|
23 | }
|
Hajo schrieb: > so ich habs jetzt mal so versucht aber ich bekomme keine Anzeige auf > meinem LCD. Dann fange doch mal damit an; es gibt hier viel Info zu etlichen LCD-Typen. Wenn dann die Ausgabe klappt, geht es mit dem nächsten Punkt weiter.
Der Text wird mir Angezeigt bloß nicht die zahlen die in Eingabe drin sind
ich bekomme leider nur diese Ausgabe 000 Temperatur
1 | char Eingabe[50]; |
2 | int Count; |
3 | |
4 | uint8_t i = 0; |
5 | char s[7]; |
6 | char g; |
7 | |
8 | |
9 | |
10 | for (;;) |
11 | {
|
12 | |
13 | |
14 | uart_puts( "Temperatur" ); |
15 | |
16 | uart_puts( " " ); |
17 | |
18 | |
19 | |
20 | {
|
21 | |
22 | do
|
23 | {
|
24 | c = uart_getc(); //Daten lesen |
25 | Eingabe[Count++] = c; |
26 | }
|
27 | while ((c != 13)); |
28 | |
29 | |
30 | |
31 | }
|
32 | |
33 | |
34 | for(i=0; i<6; i++) |
35 | {
|
36 | g = Eingabe[i++]; |
37 | itoa( g, s, 10 ); // 10 fuer radix -> Dezimalsystem |
38 | uart_puts( s ); |
39 | }
|
40 | }
|
41 | }
|
Schon beim ersten Drüberlesen sieht man etliche Fehler, mit denen nichts klappen kann: - Count wird weder intialisiert, noch jemals wieder zu 0 zurückgesetzt. Trotzdem wird es stetig erhöht und als Index verwendet. - Du nimmst aus dem Feld mit den gelesenen Zeichen (!) jeweils eines und versuchst es in einen String zu wandlen. Aber es sind doch schon ASCII-Zeichen, oder nicht? - in der letzten Schleife wird i jeweils zweimal erhöht - da Count irgendeinen lustigen Wert hat, wird in der letzten Schleife kaum das gelesen, was vorher über Count gespeichert wurde Willst du nicht vielleicht doch erst am PC erst mal die C-Grundlagen lernen?
Leider bekomme ich nach den Änderungen immer noch 000 Temperatur angezeigt. Leider schaffe ich es nicht die Tempwerte Auszugeben deshalb hab ich hier im Forum Nachgefragt. Bei der datenausgabe vom Temp-Modul hab ich wohl etwas vergessen, hier nun das Korrekte Ausgabe Format. Sensornummer 1-16 0 1 Temperatur 2stellig vorm Komma 23 Vorzeichen + für Plusgrade Leerzeichen für Minusgrade + Nachkommastelle 1stellig 5 Übertragung beendet 13
1 | char Eingabe[50]; |
2 | int Count; |
3 | |
4 | uint8_t i = 0; |
5 | char s[7]; |
6 | char g; |
7 | |
8 | |
9 | |
10 | for (;;) |
11 | {
|
12 | |
13 | Count=0; |
14 | uart_puts( "Temperatur" ); |
15 | |
16 | uart_puts( " " ); |
17 | |
18 | |
19 | |
20 | {
|
21 | |
22 | do
|
23 | {
|
24 | c = uart_getc(); //Daten lesen |
25 | Eingabe[Count++] = c; |
26 | }
|
27 | while ((c != 13)); |
28 | |
29 | |
30 | |
31 | }
|
32 | |
33 | |
34 | for(i=0; i<6; i++) |
35 | {
|
36 | g = Eingabe[i]; |
37 | itoa( g, s, 10 ); // 10 fuer radix -> Dezimalsystem |
38 | uart_puts( s ); |
39 | }
|
40 | }
|
41 | }
|
- jetzt fragst du nicht mal mehr ab, ob das Lesen von UART geklappt hat (ich vermute, daß es nötig ist, kenne aber deine uart_...-Lib nicht) - du liest bis 13, egal wieviele Zeichen es sind und egal ob es noch in den Puffer passt - egal wieviele Zeichen du gelesen hast, du wandelst immer 6 Zeichen zur Ausgabe. - wenn das erste gelesene Zeichen nicht am Anfang des Datensatzes beginnt, merkst du das gar nicht und gibst trotzdem 6 Zeichen wieder aus - alleine deshalb mag ich deine angebliche Ausgabe "000 Temperatur" nicht glauben, erwarten würde ich zumindest "Temperatur 000000" Wenn du so weiter programmierst, wird das heute nacht noch richtig krachen! Irgendwie macht es auch keinen richtigen Spaß, wenn du kaum Info lieferst, das auch nur stückweise, den Fehler nicht beschreiben kannst, keine minimalen Grundlagen lernen willst, und die Fragen nur unleserlich hinrotzt. Trotzdem guten Rutsch!
Die Gelesene Zeichenlänge ist doch Begrenzt ,6 Zeichen, die 13 sagt dann Ende der Übertragung. Dann lese ich die 6 Zeichen wieder aus. Ich bin nun mal kein C-Profi,deshalb stellte ich ja auch hier im Forum meine Frage weil ich das alleine nicht hinbekomme.
kann mir denn niemand ein kleines Stück weiterhelfen damit ich die Tempwerte ausgeben kann
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.