usart c18 compiler

Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte

Elektronik Forum Nicht eingeloggt       Einloggen       Registrieren




[Registrieren]      --     [FAQ]      --     [ Einen Link auf Ihrer Homepage zum Forum]      --     [ Themen kostenlos per RSS in ihre Homepage einbauen]      --     [Einloggen]

Suchen


Serverzeit: 07 10 2024  08:33:49      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Osziloskop-Schirmbilder            


Elektronik- und Elektroforum Forum Index   >>   Microcontroller        Microcontroller : Hardware - Software - Ideen - Projekte

Gehe zu Seite ( 1 | 2 Nächste Seite )      


Autor
usart c18 compiler

    







BID = 624884

sacha.co

Gerade angekommen


Beiträge: 9
Wohnort: Gießen
 

  


hallo zusammen !
ich bin neu in der Pic-Welt und habe Schwierigkeiten eine float zahl
usart zu lesen(Hyperteminal) . ich benutze ein c 18 compiler .
Ich habe auch gelesen , das der C 18 compiler keine konvertierung von
float nach ascii nach . Weisst jemand wie , macht das Problem umgehen kann. Ich mache im moment folgendes und lesen nichts .
Ich freue mich über Ihre Vorschläge.



Code :

 


#include <p18cxxx.h>
#include <spi.h>
#include <usart.h>
#include <stdio.h>

void Init_USART(void)
{
OpenUSART ( USART_TX_INT_OFF &
USART_RX_INT_OFF &
USART_ASYNCH_MODE &
USART_EIGHT_BIT &
USART_SINGLE_RX &
USART_BRGH_HIGH, 64);
}

// VARIABLE
float temp;// Float Zahl


void main()
{

while(1)
{

fprintf (_H_USART, "Temp_Value: %f; \n", temp); // Temperatur lesen

}
}




mfg
Sascha

BID = 624930

perl

Ehrenmitglied



Beiträge: 11110,1
Wohnort: Rheinbach

 

  

Wie wärs's, wenn du deine Frage noch einmal, diesmal aber lesbar und verständlich, formuliertest?

BID = 624958

sacha.co

Gerade angekommen


Beiträge: 9
Wohnort: Gießen

Morgen Perl

Danke erst mal !ich habe gerade gemerkt , dass meine Post überhaupt nicht verständlich ist . Ich möchte gern ein float zahl über USART lesen ( Hyper Terminal ). Diese Zahl lässt sich nacher im Hyper Terminal als ASCII Zahl darstellen . Mein C 18 Compiler macht scheinbar die Konvertierung nicht ( Float nach ASCII) . Ich frage mich , wie ich das Problem umgehen könnte. Hier ist meine aktuelle code , die allerdings nicht funktiniert.


Code :


#include <p18cxxx.h>

#include <spi.h>

#include <usart.h>

#include <stdio.h>



void Init_USART(void)

{

OpenUSART ( USART_TX_INT_OFF &

USART_RX_INT_OFF &

USART_ASYNCH_MODE &

USART_EIGHT_BIT &

USART_SINGLE_RX &

USART_BRGH_HIGH, 64);

}



// VARIABLE

float temp;// Float Zahl



void main()

{


while(1)

{


fprintf (_H_USART, "Temp_Value: %f; \n", temp); // Temperatur lesen


}

}





mfg
Sascha

BID = 624997

Racingsascha

Schreibmaschine



Beiträge: 2247
Wohnort: Gundelsheim
ICQ Status  

Richtige Baudrate eingestellt?
RxD und TxD vielleicht vertauscht?
Versuch mal ein paar Testzeichen zu verschicken.

_________________
Fnord ist die Quelle aller Nullbits in deinem Computer.
Fnord ist die Angst, die Erleichterung, und ist die Angst.
Fnord schläft nie.

BID = 625018

sacha.co

Gerade angekommen


Beiträge: 9
Wohnort: Gießen

Hallo Racingsascha, Ich habe die richtige Baudrate eingestellt . RxD und TxD sind auch korrekt angeschloßen . Ich muss noch dazu sagen , dass ich Probleme nur mit Flaot-Zahlen habe( String , Dezimal , Hex und Binäre funktionieren ). Mein compiler wandert bloß nicht Float zu ASCII jedenfalls habe ich noch nicht rausgefunden , wie man das machen
kann. Ich hahe versucht eine "ftoa.c" in meinem Projekt einzufügen aber der compiler meldet sofort eine Fehlermeldung . Mensch es muss
irgendwie gehen Ich kann mir kein compiler vorstellen , der im USART Schnittstelle keine Float darstellt.



mfg
Sascha

BID = 625020

hajos118

Schreibmaschine



Beiträge: 2453
Wohnort: Untermaiselstein

Wie sieht Deine Ausgabe am Hyperterminal aus?
Versuch doch mal zuerst etwas Text auszugeben - sozusagen als "Begrüssungs - Text". Wenn der richtig ankommt, dann könnte es nur noch daran liegen, dass innerhalb der while-Schleife zu schnell auf das Ausgaberegister geschrieben wird - bin jedoch kein Spezialist für diesen Controller/Compiler, kann daher auch nur Vermutungen über das Verhalten anstellen...
... und der Variablen "temp" solltest Du einen Wert zuweisen, sonst hast Du keine Kontrolle ob die float - Zahl richtig angezeigt wird.

edit:
Habe gerade gelesen, dass Du Strings ect. ausgeben kannst.
Mach doch mal die Umwandlung in 2 Schritten:
sprintf(tempstring,"%f",temp);
fprintf(..... mit dem tempstring in der Ausgabe)

Da wirst Du schnell überprüfen können, ob die Umwandlung funktioniert.

_________________
Interpunktion und Orthographie dieses Beitrags sind frei erfunden.
Eine Übereinstimmung mit aktuellen oder ehemaligen Regeln wäre rein zufällig und ist nicht beabsichtigt.
Wer einen Fehler findet, darf ihn behalten!

[ Diese Nachricht wurde geändert von: hajos118 am  5 Aug 2009 13:33 ]

BID = 625027

perl

Ehrenmitglied



Beiträge: 11110,1
Wohnort: Rheinbach


Zitat :
. Hier ist meine aktuelle code , die allerdings nicht funktiniert.
Woran merkst du das?

Zitat :
Hallo Racingsascha, Ich habe die richtige Baudrate eingestellt
Die Quarzfrequenz passt auch zu den Annahmen des Compilers?

Was ist mit der Wortlänge, 7 oder 8 Bit, und den Parity Einstellungen?
Das muss alles zu den Einstellungen des Empfängers passen, sonst siehst du nur Buchstabensalat.

Folge mal Racingsaschas Empfehlung und kontrolliere, ob du "Hello World" fehlerfrei übertragen kannst.
Falls überhaupt nichts kommt: Sind TxD und RxD an den richtigen Anschlüssen, und das Handshake richtig konfiguriert?


Zitat :
und der Variablen "temp" solltest Du einen Wert zuweisen, sonst hast Du keine Kontrolle ob die float - Zahl richtig angezeigt wird.
Definitionsgemäß initialisiert ein C-Compiler Variablen mit 0. Hoffentlich ...

BID = 625028

hajos118

Schreibmaschine



Beiträge: 2453
Wohnort: Untermaiselstein

@perl:

Zitat :
sacha.co hat am  5 Aug 2009 13:25 geschrieben :

Ich muss noch dazu sagen , dass ich Probleme nur mit Flaot-Zahlen habe( String , Dezimal , Hex und Binäre funktionieren ).

Also dürften die einfachen Probleme entfallen ... (RX / TX, Protokolldaten-Fehler ect)

_________________
Interpunktion und Orthographie dieses Beitrags sind frei erfunden.
Eine Übereinstimmung mit aktuellen oder ehemaligen Regeln wäre rein zufällig und ist nicht beabsichtigt.
Wer einen Fehler findet, darf ihn behalten!

BID = 625052

sacha.co

Gerade angekommen


Beiträge: 9
Wohnort: Gießen

Hallo perl und hajos118,

Ich benutze eine 10 Mhz Quarz und ich vermute weniger , dass es daran liegt . ich habe gerade in 2 Schritte zu machen , aber es kommt nicht dabei raus. Wegen der Einstellung denke ich auch , das es nicht daran liegt . Ich habe ein Bild von meinem Hyper Terminal angehängt. Da können
Sie auch meine Einstellung sehen. Ich kann Test ausgeben


Code :


fprintf (_H_USART, "hallo");// es funktioniert



@hajos118
Mit 2 Schritte meine Sie so was.



Code :


float temp;
char buffer[10];
main()
{
temp = 23.34;
while(1)
{
sprintf(buffer,"%f",temp);

fprintf (_H_USART, "Temp: %s ; ", buffer[10]);
fprintf (_H_USART, "\r\n");

}
}





BID = 625054

sacha.co

Gerade angekommen


Beiträge: 9
Wohnort: Gießen

Die Einstellung meines Hyper Terminals als Bild



BID = 625068

hajos118

Schreibmaschine



Beiträge: 2453
Wohnort: Untermaiselstein

Code ist so wie gedacht.
Evtl. musst Du ("Du" ist hier üblich) im Ausgabebefehl das genaue Format angeben, z.B.: "%3.5f".


edit:
Code stimmt nicht ganz ....
besser so:


Code :


...
while(1)

{

sprintf(buffer,"%3.5f",temp);
fprintf (_H_USART, "Temp: %s \r\n", buffer);

}
...



_________________
Interpunktion und Orthographie dieses Beitrags sind frei erfunden.
Eine Übereinstimmung mit aktuellen oder ehemaligen Regeln wäre rein zufällig und ist nicht beabsichtigt.
Wer einen Fehler findet, darf ihn behalten!

[ Diese Nachricht wurde geändert von: hajos118 am  5 Aug 2009 17:15 ]

[ Diese Nachricht wurde geändert von: hajos118 am  5 Aug 2009 17:16 ]

BID = 625077

sacha.co

Gerade angekommen


Beiträge: 9
Wohnort: Gießen

Hallo hajos118,

Danke für deine Tipps! Ich habe es geändert , aber es funktioniert
immer noch nicht (das gleiche Bild wie oben!) . Eure heiße Tipps werden erwünscht !
Das muss irgendwie gehen .....

Gruß
Sascha

BID = 625104

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika

Moin,

Zeigt er denn den Formatstring, ohne die ersetzten Platzhalter (%f) an oder garnichts?

Ich kenne den C18 nicht, aber ich vermute, dass man auch auf PICs nicht ohne weiteres Gleitkommazahlen berechnen kann und dass auch dazu mit einer entsprechenden Bibliothek gebunden werden muss.

In exakt solchen Fällen wäre es gut, sich mal anzuschauen, was hintem beim Assembler rausgekommen ist. Gibt es denn irgendeinen Hinweis, der beim Build-Vorgang u.U. ausgegeben wird? Z.B. prüft der gcc sogar Formatstrings und überprüft die Datentypen der Parameter (z.B. in printf). Das wäre eigentlich garnicht seine Aufgabe, ist aber hilfreich.

Mit solch Funktionen würde ich sowieso sparsam umgehen, wenn es geht, sollte man auf kleinen µCs derlei Datentypen nicht nutzen, sondern mit ein paar Tricks arbeiten. Z.B. habe ich viele Sachen, die eigentlich "Kommazahlen" wären, mit reinem Ganzzahlen berechnet, und beim Ausgeben später einfach an bestimmter Stelle ein Komma gesetzt. Intern werden aber keine Verfahren implementiert, die mit Gleitkommazahlen arbeiten.


_________________

BID = 625116

sacha.co

Gerade angekommen


Beiträge: 9
Wohnort: Gießen

Abend Don Comi,
Er zeigt gar nichts . Ich habe oben ein Bild davon gepostet. Ich arbeite mit einem kalibriertfaktor , der sehr klein ist . Aus dem Grund muss ich mit float arbeiten . Mein PIC bearbeitet float Zahlen , aber er kann sie bloß nicht über USART anzeigen . Mir würde auch reichen , wenn er die Ganzzahlen liefern . Aber wenn ich statt %f eine %d mache , kommt nur irgendwelche Zahlen aus . Ich glaube ich muss wohl auf die visualisierung verzichten und weitermachen.

Gruß

Sascha

BID = 625154

DonComi

Inventar



Beiträge: 8605
Wohnort: Amerika

Hallo,

Wenn bekannt ist (Google!), wie genau die Gleitkommazahlen binär aufgebaut sind (ich glaube, Microchip inkl. Compiler haben da ein eigenes System, weiß es aber nicht ganz, da ich damit nie gearbeitet habe), kann man sich auch selbst eine Routine zum Anzeigen schreiben. Nur ist das wieder eine neue Baustelle neben der eigentlichen...

Sonst könnte man aber z.B. die mit Gleitkommazahlen zu verrechnenden Ganzzahlen per UART an den Rechner übertragen und dort mit einem eigenen Terminalprogramm weiterverarbeiten.

Da ich Linux nutze kommt man ziemlich flott und unkompliziert an die Daten und kann so weiterarbeiten, auch mit allen Luxus-Bibliotheken wie der kompletten und allem drum und dran. Und schneller ist es auch.

Als Tipp für dich RealTerm. Da kann man sich die Bytes als Zahlen anzeigen lassen. Zur Not muss man zu Fuß, also mit einem Taschenrechner, diese Dinge ausrechnen, wenn es nur ums Debuggen geht. Das eigentliche Problem löst das aber nicht, wenn z.B. Klartextzahlen auf einem Display ausgegeben werden sollen, benötigst du einfach eine Umrechnungsfunktion oder aber du löst es anders (wie gesagt: große Ganzzahlen).



_________________


      Nächste Seite
Gehe zu Seite ( 1 | 2 Nächste Seite )
Zurück zur Seite 0 im Unterforum          Vorheriges Thema Nächstes Thema 


Zum Ersatzteileshop


Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum       Datenschutz       Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland       

gerechnet auf die letzten 30 Tage haben wir 20 Beiträge im Durchschnitt pro Tag       heute wurden bisher 4 Beiträge verfasst
© x sparkkelsputz        Besucher : 182138019   Heute : 904    Gestern : 5489    Online : 559        7.10.2024    8:33
4 Besucher in den letzten 60 Sekunden        alle 15.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
xcvb ycvb
0.0559990406036