Forum: Mikrocontroller und Digitale Elektronik unsigned Int mit C18 übertragen


von Ingo S. (schicki)


Lesenswert?

Hallo zusammen,

ich würde gerne einen RTC (PCF8583 oder DS1337) mittels RS-232 stellen.

Die Uhrzeit und das Dateum sind im Baustein als unsigned int 
gespeichert. Die Funktionien funktionieren auch problemos.

Nun würde ich gerne eine Funktion hizufügen. Datum und Uhrzeit per PC 
(RS-232 Schnittstelle) einstellen.

Leider kann der C18 keine unsigned int direkt empfangen, und die CAST 
Funktion arbeitet nicht sauber. Hat jemand eine Idee?  Bin gerade mit 
einem Array am experimentieren.

Danke und Gruß
Ingo

von Mike (Gast)


Lesenswert?

Ingo Schick schrieb:
> Nun würde ich gerne eine Funktion hizufügen. Datum und Uhrzeit per PC
> (RS-232 Schnittstelle) einstellen.

Bei Verwendung der RS-232 Schnittstelle wirst du dich auf die 
Übertragung von einzelnen Bytes einrichten müssen, d.h. du mußt deine zu 
übertragenden Daten in eine Kette von Bytes umformen, mit Start- 
und/oder Stopzeichen versehen, übertragen und beim Empfänger den 
Übertragungsrahmen wieder von den Nutzdatenbytes trennen. Dann kannst du 
wieder deine unsigned int, wieviele Bytes auch immer die bei C18 haben, 
zusammensortieren und damit deine RTC füttern.

von Rolf Magnus (Gast)


Lesenswert?

Ingo Schick schrieb:
> Leider kann der C18 keine unsigned int direkt empfangen,

Wie sollte er auch? Bei RS232 werden einzelne Bytes übertragen.

> und die CAST Funktion arbeitet nicht sauber.

Was immer das heißen mag...

> Hat jemand eine Idee?

Am elegantesten ist es, bei sowas gar nicht direkt Binärdaten, sondern 
Text zu übertragen. Dann kannst du zur Not auch mal von Hand mit einem 
seriellen Terminal dran. Das hat den Vorteil, daß du die µC-Seite der 
Übertragung erstmal komplett fertig machen kannst, ohne die andere 
gleichzeitig zu bauen. Wenn man eine Übertragung programmieren muß, bei 
der beide Seiten von Anfang an vorhanden sein müssen, mußt du bei einem 
Fehler immer erst rausfinden, auf welcher Seite der jetzt aufgetreten 
ist.

von gnd3 (Gast)


Lesenswert?

Ingo Schick schrieb:

> (PCF8583 oder DS1337)

> Die Uhrzeit und das Dateum sind im Baustein als unsigned int
> gespeichert.

> und die CAST Funktion arbeitet nicht sauber

vielleicht habt ihr (du, der Compiler und die Hardware) unterschiedliche 
Ansichten, was ein unsigned int ist. Die Bausteine benutzen das 
BCD-Format, das kann man nicht sinnvoll casten.

von Ingo S. (schicki)


Lesenswert?

Hallo,

Du Umwandlung von Integer nach BCD funktioniert. Wie schon die 
Vorschreiber beschrieben haben geht es mir um eine saubere Übertragung 
von Bye nach Integer. Da muss ich wohl etwas mehr Zeit einplanen.

Danke und Gruß an Alle

von Karl H. (kbuchegg)


Lesenswert?

Es ist wohl eher so, wie meistens.
Du wirst wohl nicht umhin kommen, erst mal vernünftig C zu lernen.

von gnd3 (Gast)


Lesenswert?

Ingo Schick schrieb:
> Du Umwandlung von Integer nach BCD funktioniert.

na, das ist doch schon die halbe Miete für die RS-232-Übertragung. Vom 
Terminalprogramm auf dem PC kommen ASCII-Zeichen an. Jedes Zeichen 
entspricht genau einer BCD-Ziffer aus der RTC. Du musst nur noch aus der 
ASCII-Eins eine BCD-Eins machen indem du '0' (0x30) subtrahierst.

von Ingo S. (schicki)


Lesenswert?

Hab den den Veursacher entdeckt.

Die Schnittstelle sendet korrekt. Im Conroller werden allerdings die 
Daten anders interpretiert. Auf einem anderen PIC-Typ läuft das selbe 
Programm seltsamer weise ganz normal.

Danke nochmal für die Unterstützung.

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
Noch kein Account? Hier anmelden.