Forum: Mikrocontroller und Digitale Elektronik Brauche Hilfe wie ich vorgehen soll =)


von Ulf C. (parabol1337)


Lesenswert?

Hi leute ich hab da mal ne frage.

also erst mal im Groben, ich habe einen ATmega16 einen Laderegler eine 
Solar anlage und eine 6 Stellige 7-Segment-Anzeige (multiplex)


Ich frage den Laderegler mit hilfe von RS232 ab, in dem ich ihm 46hex 
sende.
Der Laderegler antwortett mir auch gleich darauf. Die Strucktur sieht 
ungefähr so aus. R 1 3 , 3 5 | 4 , 6 <- Jede zeichen ist ein Eigenes 
Byte.

Diese 10 Byte Packe ich mir in den stack.. soweit bis da kein Problem.

Jetzt weiß ich nciht so richtig wie ich am schlauesten vorgehe. Die 
beiten werte also 13,35 volt und 4,6 Ampere müssen wieder aus dem Stack 
und miteinander multipliziert werden (damit ich die leistung in Watt 
habe).

Um den Wert dann an die Anzeige weiter zugeben muss der wert aber dann 
wieder in 6 Byte aufgeteilt werden.

wie würdet Ihr vorgehen..

Danke für eure Tips

schöne Grüße

von Sven P. (Gast)


Lesenswert?

ATmega16 ist dick genug, deshalb atoi und itoa, dann Zeichenweise 
pulen...

von Ulf C. (parabol1337)


Lesenswert?

wie darf ich das verstehn?

erst die Daten aus dem Stack in Register schreiben, denn diese Register 
decementieren und dann 3 Register (24bit) hochzählen lassen?

dann das ganze multiplizieren und alles wieder rückwärts?

so hatte ich mir das auch vorgestellt. hatte aber die Hoffnung das es 
einfacher geht.

von Sven P. (Gast)


Lesenswert?

Ich meinte 'dick genug für C', da gibts für sowas fertige Funktionen. 
Deine Zeichenkette dann halt in einem Puffer halten.

von Master S. (snowman)


Lesenswert?

> Diese 10 Byte Packe ich mir in den stack
ich würde sie in einem array speichern

schreibe ein funktion DisplayWatt(zeichen, position), die dir das 
entsprechende zeichen an der entsprechenden position auf dem display 
anzeigt

und dann in einem loop:
  WattWert = (array[1]*100 + array[2]*10 +..)*(...); //oder so ähnlich
  DisplayWatt(WattWert/100, 1);
  wait_some_ms;
  WattWert %= 100;
  DisplayWatt(WattWert/10, 2);
  wait_some_ms;
  WattWert %= 10;
  DisplayWatt(WattWert, 3);
  wait_some_ms;


ist zwar nicht sonderlich schön und schnell, aber funktioniert. (ich 
hoffe, ich habe in der eile keinen tipp/denk-fehler gemacht)

von Anselm (Gast)


Lesenswert?

Darf ich mal dumm fragen wie du die 7-Segment Anzeige ansteuerst?
Manuell vom µC aus oder mit einem fertige IC?

Gruß Anselm

von Ulf C. (parabol1337)


Lesenswert?

hi danke schon mal für die Tips. also ich hab noch nichts mit AVR und C 
gemacht bis jetzt ist das Progrramm in ASM.

also ich steuer die anzeige über n IC an also ein 4511 (bitte schlagt 
mich nicht dafür aber ich brauche jeden Pin an diesem Controller)

von Ulf C. (parabol1337)


Lesenswert?

so =) habe heute mein Ganzes Programm von ASM in C umgeschrieben.

Meiner Meinung noch ist C weitaus einfacher  so mal ich in viel PHP 
programmiere. Strucktur ist teilweise leicht gewöhnungsbedürftig aber im 
ganzen Danke schon mal

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.