Menü ohne Bremse morsen

OP #2918638
Lesenswert?
• ▲
▼
Hallo,
habe dank eurer Hilfe einen Timer des tiny85 für pwm, einen für pd 
Entprellung verwendet. Nun würde ich gerne kurze Menüauswahl morsen ohne 
aber alles mit den Warteschleifen auszubremsen. Versucht habe ich 
folgendes im main, ist aber sicher der falsche Weg, bei Menü 4 ....- 
würde das alles ausbremsen.

if( get_key_short( 1<<KEY1 ))
  { menu= menu+1;
    if (menu>4) menu=0;
  }
if(menu==1)
{
      ...setze duty 1 etc
  PORTB |= 1 << LEDx;
  delay_ms1(1000);
  PORTB &= ~(1 << LEDx);
  delay_ms1(1000);
}
#2918688
Lesenswert?
• ▲
▼
Peter E. schrieb:
> Hallo,
> habe dank eurer Hilfe einen Timer des tiny85 für pwm, einen für pd
> Entprellung verwendet.

Auf welche Zeit ist der Entprelltimer eingestellt.
Den kann man sicher nicht mitbenutzen um damit eine 'Eieruhr' zu 
realisieren.
Nach dem Muster
1
volatile uint16_t downTimer;
2

3
ISR( ... )
4
{
5
  if( downTimer > 0 )
6
    downTimer--;
7

8
  ....
9
  restlicher Entprellcode
10
}
11

12

13
int main()
14
{
15
  ....
16

17

18
  while( 1 ) {
19

20
    ....
21
    if( irgendwas ) {
22
      Led einschalten;
23
      cli();
24
      downTimer = 500;   // nur Beispielsweise. Die Zahl richtet sich
25
                         // dann danach, wie oft die ISR aufgerufen wird
26
      sei();
27
    }
28

29
    if( downTimer == 0 )
30
      Led ausschalten
31
    
32
  }
33
}

Also: eine Variable fungiert als Zähler, die in der Timer ISR in 
regelmässigen Zeitabständen runtergezählt wird. Durch Zuweisen einer 
Zahl 'startet' dieses runterzählen und wenn die Variable bei 0 
anbgelangt ist, dann ist die durch die Zahl eingestellte Zeit 
verstrichen.
Wie bei einer Sanduhr, die man zum Eierkochen benutzt.


Ausgehend davon, kannst du dann deine Blinker realisieren.

PS: was mit einer Variablen geht, geht auch mit 10. Dann hat man 10 
Eieruhren, du unabhängig voneinander runterzählen.
OP #2918702
Lesenswert?
• ▲
▼
meinst du den ?
TCNT1 = (uint8_t)(int16_t)-(F_CPU /  1024 * 10e-6 + 0.5);
musste damit etwas rumschrauben bis das Tastenfeeling passte
im Moment hab ich  F_CPU 10000000 eingestellt.
hab aber einen neuen erstellt und bin begeistert, keine Warteschleifen 
Bremse mehr.
Danke
OP #2918703
Lesenswert?
• ▲
▼
hätte da noch eine Frage,
get_key_long und get_key_rpt aus PD's c-Luxusfunktion funktionieren 
beide truamhaft, beisen sich logischerweise wenn sie am selben Taster 
laufen (hab noch nicht probiert die REPEAT_START extrem hoch zu setzen), 
aber wie würde es mit einem Doppelcklick ausschauen, wäre das ohne 
riesen Aufwand zu realisieren? Vielleicht in der ISR mit einem Zähler ( 
key_press |= key_state & i;) nochmal abfragen?
#2920382
Lesenswert?
• ▲
▼
>musste damit etwas rumschrauben bis das Tastenfeeling passte
>im Moment hab ich  F_CPU 10000000 eingestellt.

F_CPU ist nicht frei wählbar, sondern sollte deine eigentliche 
Quarzfreuquenz wiederspiegeln. Einige libs (delay.h usw.) kommen sonst 
ausm Takt. Also was hasten fürn Quarz?

Gruß Jonas
OP #2921554
Lesenswert?
• ▲
▼
hab im Moment keinen Quarz angeschlossen, sondern den internen in 
Verwendung. War der Meinung im Studio > Toolchain > Symbols (allconfigs) 
das "F_CPU=10000000UL" würde die Frequenz bestimmen, habe aber gerade 
unter Device Programming > Fuses unter SUT_CKSEL den Eintrag 
"INTRCOSC_8MHZ_6CK_14CK_64MS" gefunden. Muss ich jetzt mein Symbol und 
das C-file auf die 8MHz anpassen um richtig zu liegen?

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.