Forum: Mikrocontroller und Digitale Elektronik LCD Ausgabe straffen?


von Martin S. (sv_martin)


Angehängte Dateien:

Lesenswert?

Tag an alle

Also die LCD-Routine für das EADIP 122 X 32 in verbindung des 
Timer-Interrupts bietet in der
1
 while(1) {..}
 Schleife die Möglichkeit der
Ausgabe.

Läßt sich das ganze etwas straffer gestalten ?

Reinen Denkanstöße werden bevorzugt behandelt.

Grüße Martin

von Oliver J. (skriptkiddy)


Lesenswert?

Wie bitte?
Du hast dich mal so richtig unklar ausgedrückt.

von holger (Gast)


Lesenswert?

if(sekunde_neu = (sekunde+1))

Du brauchst dringend ein C Buch.

von Martin S. (sv_martin)


Lesenswert?

Ja ? wiso wie gehts besser

von Spess53 (Gast)


Lesenswert?

Hi

>Läßt sich das ganze etwas straffer gestalten ?

Z.B., wenn du deine Ziffern/Zeichen in der richtigen Reihenfolge 
ausgibst, kannst du dir die ganzen GoTos sparen. Das LCD schiebt den 
Cursor auch allein weiter. Und dieses:

>    if(sekunde_neu = (sekunde+1))
...
>               sekunde_neu = sekunde;
...

>    if(sekunde==60)
>       {
>        minute++;
>           sekunde=0;

kommt selbst mir als notorischen Asseblerprogrammierer spanisch vor.

MfG Spess

von Huch (Gast)


Lesenswert?

>>if(sekunde_neu = (sekunde+1))
>Ja ? wiso wie gehts besser

Die Frage ist nicht wie es besser geht,
sondern wie es überhaupt geht.

Und das steht in einem C-Buch.

von Peter D. (peda)


Lesenswert?

Martin Sv schrieb:
> Ja ? wiso wie gehts besser

Die Zeile geht schon (syntaktisch richtig), aber macht was anderes, als 
Du vermutest.
Der GCC wird auch eine Warnung ausgespuckt haben.


Peter

von Nonsense (Gast)


Lesenswert?

Martin Sv schrieb:
> Ja ? wiso wie gehts besser

Es würde erstmal reichen, wenn es richtig wäre. Danach kann man sich 
darum kümmern, wie man es besser macht.

von Martin S. (sv_martin)


Lesenswert?

Spess53 schrieb:
>>    if(sekunde_neu = (sekunde+1))

DA war der Hintergedanke, es reicht 1/sec refresh das Diplays.

Die anderen "Zitate" sind aus dem Timer Tutotial
und fand ich eigentlich recht ordentlich

von Martin S. (sv_martin)


Lesenswert?

Peter Dannegger schrieb:
> Der GCC wird auch eine Warnung ausgespuckt haben.

nee eigentlich funtz die Ausgabe wie gewünscht,
eure Codes sind alle so straff, da wollt ich hin.

von holger (Gast)


Lesenswert?

>DA war der Hintergedanke, es reicht 1/sec refresh das Diplays.

DA du es an anderen Stellen richtig gemacht hast
vermute ich hier einen Tipfehler. Schau noch mal GENAU hin
bei dieser Zeile;) Was macht sie, und was sollte sie machen?

von Nonsense (Gast)


Lesenswert?

Martin Sv schrieb:
>>>    if(sekunde_neu = (sekunde+1))
>
> DA war der Hintergedanke, es reicht 1/sec refresh das Diplays.

Das tut es dort aber nicht. Du machst dort eine Variablenzuweisung und 
keine boolsche Überprüfung.

von Martin S. (sv_martin)


Lesenswert?

Huch schrieb:
> if(sekunde_neu = (sekunde+1))

Also gehn tut es wohl, jedoch nur weil, wie peda Prophezeit hat

../A8_LCD.c:44: warning: suggest parentheses around assignment used as 
truth value

der Compiler annimmt, dass ich etwas bestimmtes wünsche

nachdem hier bools und falsch genannt wurde ist Lösung möglicherweise??

die o.g. Zeile hab ich auskomentiert und es geht genauso, also hatte die
"Variablenzuweisung keinen Zweck den es zu erfüllen galt".

Dann danke erst mal an alle beteiligten--> bin dann mal ein C-Buch 
kaufen

von Karl H. (kbuchegg)


Lesenswert?

Martin Sv schrieb:

> nee eigentlich funtz die Ausgabe wie gewünscht,

Nicht wirklich

Denk mal über den Unterschied zwischen == und = nach.
Und frag dich mal warum dein Programm wohl auf das _delay_ms in der 
Hauptschleife angewiesen ist und flackert wie Sau wenn du es rausnimmst 
:-)


> eure Codes sind alle so straff, da wollt ich hin.

Ist doch kein Problem, wenn man seine Pappenheimer (C-Funktionen) kennt
1
int main()
2
{
3
4
  char Buffer[30];
5
6
  GLCD_Init();
7
  GLCD_ClearScreen();
8
9
  OCR0 = 500;                 
10
  TCCR0 = (1<<WGM01) | (1<<CS01);     // Hier wird der CTC-Modus und die Prescaler (4000000/8=500)   
11
  TIMSK|=(1<<OCIE0);
12
  sei();  
13
14
  int sekunde_neu = 0;
15
16
  while(1)
17
  {
18
//  /-----/-----/-----/-----/-----/-----/-----/-----/    
19
//  |                        |
20
//  |  h    h      :     m     m     :     s     s  |
21
//  |                        |
22
//  /----6-----12----18----24----30----36----42----46
23
24
    if( sekunde != sekunde_neu )
25
    {
26
      sekunde_neu = sekunde;
27
28
      sprintf( Buffer, "  %d  %d   :   %d  %d   :   %d  %d",
29
                  stunde / 10, stunde % 10,
30
                  minute / 10, minute % 10,
31
                  sekunde / 10, sekunde % 10 );
32
33
      GLCD_GoTo( 0, 1 );
34
      GLCD_WriteString( Buffer );
35
    }
36
  }
37
38
  return 0;
39
}

Vielleicht doch mal einen Blick in ein C-Buch riskieren? Da wirst du 
noch jede Menge anderes Interessantes finden.

von Martin S. (sv_martin)


Lesenswert?

Peter Dannegger schrieb:
> Der GCC wird auch eine Warnung ausgespuckt haben.

> Denk mal über den Unterschied zwischen == und = nach.
> Und frag dich mal warum dein Programm wohl auf das _delay_ms in der
> Hauptschleife angewiesen ist und flackert wie Sau wenn du es rausnimmst
> :-)

Tja voll erwischt, es hat geflakert drum das _delay_ms, gut den Fehler 
mal gemacht zu haben. einmal mein ich.

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.