www.mikrocontroller.net

Forum: GCC Laufschrift mit Atmega8515 in C

Autor: Ah2k3 (Gast)
Datum: 16.05.2008 10:27

hi. habe hier folgendes problem und zwar habe ich eine led funkuhr mit
sechs 7-segment anzeigen nach einem internet projekt nachgebaut.
einige codeschnipsel habe ich etwas abgeändert um zu einer bestimmten
uhrzeit den feierabend als laufschrift anzuzeigen.


code:if((((bt.hour % 60) == 14) && ((bt.min % 60) <=15))
                &&
                  (((bt.sec % 60) > 47)))
            {  if((bt.sec % 60) == 48){
              set_led_digit(0, 0x00);
              set_led_digit(1, 0x00);
              set_led_digit(2, 0x00);
              set_led_digit(3, 0x00);
              set_led_digit(4, 0x00);
              set_led_digit(5, 0xE8);/*F*/
              set_led_digit(6, 0x00);  /*the dots*/
            }  if((bt.sec % 60) == 49){
              set_led_digit(0, 0x00);
              set_led_digit(1, 0x00);
              set_led_digit(2, 0x00);
              set_led_digit(3, 0x00);
              set_led_digit(4, 0xE8);/*F*/
              set_led_digit(5, 0xEc);/*E*/
              set_led_digit(6, 0x00);  /*the dots*/
            }  if((bt.sec % 60) == 50){
              set_led_digit(0, 0x00);
              set_led_digit(1, 0x00);
              set_led_digit(2, 0x00);
              set_led_digit(3, 0xE8);/*F*/
              set_led_digit(4, 0xEC);/*E*/
              set_led_digit(5, 0x12);/*I*/
              set_led_digit(6, 0x00);  /*the dots*/
            }  if((bt.sec % 60) == 51){
              set_led_digit(0, 0x00);
              set_led_digit(1, 0x00);
              set_led_digit(2, 0xE8);/*F*/
              set_led_digit(3, 0xEC);/*E*/
              set_led_digit(4, 0x12);/*I*/
              set_led_digit(5, 0xEC);/*E*/
              set_led_digit(6, 0x00);  /*the dots*/
            }  if((bt.sec % 60) == 52){
              set_led_digit(0, 0x00);
              set_led_digit(1, 0xE8);/*F*/
              set_led_digit(2, 0xEC);/*E*/
              set_led_digit(3, 0x12);/*I*/
              set_led_digit(4, 0xEC);/*E*/
              set_led_digit(5, 0x88);/*R*/
              set_led_digit(6, 0x00);  /*the dots*/
            }  if((bt.sec % 60) == 53){
              set_led_digit(0, 0xE8);/*F*/
              set_led_digit(1, 0xEC);/*E*/
              set_led_digit(2, 0x12);/*I*/
              set_led_digit(3, 0xEC);/*E*/
              set_led_digit(4, 0x88);/*R*/
              set_led_digit(5, 0x00);
              set_led_digit(6, 0x00);  /*the dots*/
            }  if((bt.sec % 60) == 54){
              set_led_digit(0, 0xEC);/*E*/
              set_led_digit(1, 0x12);/*I*/
              set_led_digit(2, 0xEC);/*E*/
              set_led_digit(3, 0x88);/*R*/
              set_led_digit(4, 0x00);
              set_led_digit(5, 0xFA);/*A*/
              set_led_digit(6, 0x00);  /*the dots*/
            }  if((bt.sec % 60) == 55){
              set_led_digit(0, 0x12);/*I*/
              set_led_digit(1, 0xEC);/*E*/
              set_led_digit(2, 0x88);/*R*/
              set_led_digit(3, 0x00);
              set_led_digit(4, 0xFA);/*A*/
              set_led_digit(5, 0xCE);/*B*/
              set_led_digit(6, 0x00);  /*the dots*/
            }  if((bt.sec % 60) == 56){
              set_led_digit(0, 0xEC);/*E*/
              set_led_digit(1, 0x88);/*R*/
              set_led_digit(2, 0x00);
              set_led_digit(3, 0xFA);/*A*/
              set_led_digit(4, 0xCE);/*B*/
              set_led_digit(5, 0xEC);/*E*/
              set_led_digit(6, 0x00);  /*the dots*/
            }  if((bt.sec % 60) == 57){;
              set_led_digit(0, 0x88);/*R*/
              set_led_digit(1, 0x00);
              set_led_digit(2, 0xFA);/*A*/
              set_led_digit(3, 0xCE);/*B*/
              set_led_digit(4, 0xEC);/*E*/
              set_led_digit(5, 0x8A);/*N*/
              set_led_digit(6, 0x00);  /*the dots*/
            }  if((bt.sec % 60) == 58){
              set_led_digit(0, 0x00);
              set_led_digit(1, 0xFA);/*A*/
              set_led_digit(2, 0xCE);/*B*/
              set_led_digit(3, 0xEC);/*E*/
              set_led_digit(4, 0x8A);/*N*/
              set_led_digit(5, 0x9E);/*D*/
              set_led_digit(6, 0x00);  /*the dots*/
            }  if((bt.sec % 60) == 59){
              set_led_digit(0, 0xFA);/*A*/
              set_led_digit(1, 0xCE);/*B*/
              set_led_digit(2, 0xEC);/*E*/
              set_led_digit(3, 0x8A);/*N*/
              set_led_digit(4, 0x9E);/*D*/
              set_led_digit(5, 0x00);
              set_led_digit(6, 0x00);  /*the dots */
            }

ich weiß das ganze müsste auch mit einer schleife zu realisieren sein
allerdings reichen meine c kenntnisse nicht so weit :)
problem ist das die laufschrift zu langsam is
wie man im code erkennen kann rutscht der text jede sekunde einen
schritt nach links.
ich würde das gern schneller machen sodass es "flüssig" wirkt.
nur wie? :)
Autor: Matthias Lipinsky (lippy)
Datum: 16.05.2008 10:40

Dann entkoppel das Schieben von der Uhrzeit!

Starte das Scheieben einfach mit der Uhrzeit (14:15:00) und dann wird
geschoben. Als Zeitbasis für das Schieben nimmst du einen internen
Timer..
Autor: Ah2k3 (Gast)
Datum: 16.05.2008 11:28

wenn cih wüsste wie das gehen würde.wär die frage hier nich drin :)
problem is halt das mein arbeitgeber mir nich die zeit gibt für sowas c
zu lernen da das ganze ein azubi projekt ist.
und ich außer dieser uhr eh nich wirklich was mit der programmierung in
c zu tun hab.
Autor: Karl heinz Buchegger (kbuchegg) (Moderator)
Datum: 16.05.2008 11:33

Ah2k3 wrote:
> wenn cih wüsste wie das gehen würde.

Das kann dir hier auch keiner sagen.
Du musst den Uhrencode studieren. So wie dein jetziger Uhrencode
dir ein 1 Sekunden Signal gibt (über die Sekunden Variable), so wird
es wahrscheinlich irgendwo im Code noch ein 2.tes Signal geben.

Was ist denn zb. mit den beliebten blinkenden Punkten in deiner
Anzeige? Blinken die alle Sekunden oder alle halbe Sekunden?
Wenn das alle halbe Sekunde stattfindet, dann wäre das doch
ein Ansatzpunkt. Wenn nicht, dann wird es sicher irgendwas
anderes geben.
Wenn alle Stricke reissen, dann kann man immer noch einen freien
Timer dafür einsetzen, sich ein regelmässiges Signal zu erzeugen.
Aber auch hier wieder. Wir wissen nicht wie deine Uhr realisiert
ist und können daher nicht sagen, was da noch frei ist und was
man nehmen könnte.

> problem is halt das mein arbeitgeber mir nich die zeit gibt für sowas c
> zu lernen da das ganze ein azubi projekt ist.

Dann wirst du dich wohl damit zufrieden geben müssen was du hast.
Man kann keinen Motor bauen, wenn man nicht bereit ist (oder
sich die Zeit nimmt oder die Zeit gestellt bekommt) zu lernen
mit einer Feile umzugehen.

Antwort schreiben

Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
  • Aussagekräftigen Betreff wählen
  • Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
  • JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
  • Schaltpläne, Screenshots usw. als PNG oder GIF anhängen

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel






webmaster@mikrocontroller.netImpressumWerbung auf Mikrocontroller.net