www.mikrocontroller.net

Forum: Compiler & IDEs Laufschrift mit Atmega8515 in C


Autor: Ah2k3 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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:

Bewertung
0 lesenswert
nicht lesenswert
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:

Bewertung
0 lesenswert
nicht lesenswert
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 (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.