PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : UART (Uhr von C# aus an dem Microkontroller stellen)



VON THRON
15.06.2011, 17:34
19060

Hallo, miteinader bin neu beim µC Programmieren. und möchte gerade meine Uhr stellen welche ich programmiert habe über einen String wo von meinem PC- Programm über die Serielle Schnittstelle geschickt wird.

Habe als anhang gleich mal die Datei angehängt. Würde mich freuen wenn mir jemand dabei helfen könnt!

Danke!!!!!

MfG von Thron

lokirobotics
15.06.2011, 17:57
Hallo,

müssteste uns erstmal sagen, was für Hilfe du brauchst?!

Sollen wir dir die Stell-Routine schreiben? Das wird wahrscheinlich nicht passieren.
Eine präzise Fragestellung wäre wünschenswert!

VON THRON
15.06.2011, 18:20
es geht nicht um die Stellroutine es geht ganz einfach darum das mir jemand mal erklärt wie das ganze funktioniert!
Habe jetzt schon hier im Forum nachgelesen und auch in anderen Foren.

Es wäre super einfach ein wenig unterstützend erklärt das ganze mal beigebracht zu bekommen wie das funktioniert.

wkrug
15.06.2011, 18:49
Ich hab mal kurz in den Code reingeguckt.

Die Zeit Senderoutine läuft ja, wie Du sagst.

Die String Empfangsroutine müsste auch funktionieren.

Ich denke, dein Verständnis Problem sind die Strings und die Variablen.

Ein String ist eine Kette auch Zeichen wie "Hallo Welt".
Eine Variable ist eine Zah mit der man rechnen kann z.B. 1234.

In deinem empfangenen String sind nun Zahlenwerte enthalten, die du wieder in echte Variablen zurückverwandeln willst.
Dazu gibt es in C die Funktion atoi ("String",variable);
Da dort aber auch trenner wie z.B. der : in dem String sind, musst Du zuerst die Zahlenwerte rausfiltern und in einem eigenen String unterbringen.
18:33:15<CR><LF> wird dazu in die Einzelstrings stundestr[3], minutestr[3], sekundestr[3] aufgeteilt. der Inhalt von stundestr ist "18" und 0 als endekenner.
nun kannst Du den string stundestr in die variable stunde mit atoi wandeln lassen.
Das Ergebnis kann dann in deine Uhr direkt übertragen werden, weil es ja nun wieder eine Zahl ist.

Für eine konkrete Funktionsbeschreibung müsste man den Code komplett durcharbeiten, aber das solltest Du mal selber tun, Du willst ja auch was lernen dabei. Hoffe Ich!

VON THRON
16.06.2011, 12:28
ISR Routine des Controllers

unsigned char verb=0;
unsigned int minuten;
unsigned int stunden

cli();

while (UCSR0A & (1<<RXC0))
{
verb = UDR0;
}
if (verb=='s')
{
uart_gets(text,25);
stunden = atoi(text);

uart_gets(text1,25);
minuten = atoi(text1);

uart_puts("aktuelle Uhrzeit: ");
uart_puts(dtostrf( stunden, 1,0,string ));
uart_puts(":");
uart_puts(dtostrf( minuten, 1,0,string ));
uart_puts("\n");
}
sei();

Ausgabe
mit Hterm Funktion gegeben

Routine von C#:

serialPort1.PortName = "COM10";
serialPort1.Open();
serialPort1.WriteLine("s");
help = Time.Substring(0, 2);
serialPort1.Write(help + "\n");
help = Time.Substring(3, 2);
serialPort1.Write(help + "\n");
help=serialPort1.ReadTo("\n");

Ausgabe

Aktuelle Uhrzeit: 0:12 //schreibt die Stunden in die Minuten und
lässt die Minuten weg

Jetzt hab ich lediglich nur noch das Problem

lokirobotics
16.06.2011, 13:25
Erstmal die C# Ausgabe der Zeit:


//zeit cache
var time = DateTime.Now;
//Stunden
time.ToString("HH");
//Minuten
time.ToString("mm");
//Sekunden
time.ToString("ss");
Wo kommen 'text' und 'text1' im uC her?
Kannst du nochmal den ganzen Code posten?

VON THRON
16.06.2011, 14:39
Mitleirweile klappt es jetzt fehlen mir eigentlich nur noch die Sekunden

text und text1 sind 2 char arrays

char text[25];
char text1[25];

VON THRON
22.06.2011, 14:36
also die werte werden zwar übertragen docharbeitet er nicht mit den werten Weiter, am Programmtext habe ich nichts weiter geändert! Weis jemand vielleicht woran das liegt?