Forum: Mikrocontroller und Digitale Elektronik Registerinhalt rausblinken?


von Mark (Gast)


Lesenswert?

Hallo,
Ich hatte hier irgendwo mal eine Routine gesehen welche den 
Variableninhalt über eine LED rausblinken kann. Lange blinks für 0 und 
kurze blinks für 1 oder andersrum...
Ich kann es nicht mehr finden... hat jemand nen Tipp für mich?

von D. V. (mazze69)


Lesenswert?

Das ist lustig. VW hatte vor der Einführung von OBD auch sog. 
Blink-Codes. Kurz für '0' und lang für'1'.
Falls du ein Proggi damit debuggen willst, solltest du aber in der Lage 
sein, den Binär-Code jedweder Variable als Blink-Code an eine LED 
'rauszuschieben'.

von Olaf (Gast)


Lesenswert?

> Ich kann es nicht mehr finden... hat jemand nen Tipp für mich?

Wie waer es denn mit...achtung festhalten, selber programieren? Die 
Suche nach etwas so banalem dauert doch schon laenger als die 5min die 
es braucht das zu schreiben.

Olaf

von Mark (Gast)


Lesenswert?

Danke für die Tipps. Noch einer mit codebeispiel?

von Sean G. (atmega318)


Lesenswert?

Been there, done that. ABER nimm einen Debugger! Schon nach 5 minuten 
geht dir das gemorse gewaltig auf den Wecker, da bin ich mir sicher.

von D. V. (mazze69)


Lesenswert?

Für was? Wenn du nicht programmieren kannst, dann nützt dir auch kein 
Blinkcode zum Debuggen.
Wer aber programmieren kann, kann auch eine Routine erstellen, die den 
Binärcode jedweder Variablen (8, 16 oder 32 Bit) rausblinken können.

von Chris L. (kingkernel)


Lesenswert?

Das ist doch jetzt nicht sooo schwer!
du nimmst eine for-schleife, lässt sie von 0 bis 7 laufen und 
kontrollierst, ob im jeweils maskierten bit eine eins steht. wenn ja 
lässt du es kurz blinken, wenn nicht, halt eben lang.
das könnte in etwa so aussehen
1
for(uint8_t i = 0; i <= 7; i++)
2
{
3
  if(VARIABLE & (1 << i))
4
  {
5
    led_einschalten();
6
    _delay_ms(100);
7
    led_ausschalten();
8
  }
9
  else
10
  {
11
    led_einschalten();
12
    _delay_ms(500);
13
    led_ausschalten();
14
  }
15
}
ist nur mal kurz frei aus dem kopf dahin gezimmert und ungetestet, kann 
sein, dass du noch etwas beachten usst, woran ich jetzt spontan nicht 
gedacht habe.
was spricht denn gegen eine gescheite Debuuging-Hardware? besitzt dein 
µC keine JTAG oder DW-Schnittstelle? schöner wäre es die Registerinhalte 
per UART rauszugeben und am PC anzeigen zu lassen

Und das nächste mal bitte selbst nachdenken!! Wir helfen gerne, aber bei 
fragen wie "Wie lasse ich eine LED Blinken?" ist es nur rechtens, das 
man am können und willen des fragenden zweifelt.

von D. V. (mazze69)


Lesenswert?

Für was? Wenn du nicht programmieren kannst, dann nützt dir auch kein 
Blinkcode zum Debuggen.
Wer aber programmieren kann, kann auch eine Routine erstellen, die den 
Binärcode jedweder Variablen (8, 16 oder 32 Bit) rausblinken kann.

von Mark (Gast)


Lesenswert?

Danke für die Hinweise und Lebensweisheiten, leider alle das Thema 
verfehlt.
Ich suche fertigen Code oder einen Link zu einem solchen...

von Chris L. (kingkernel)


Lesenswert?

Vergiss es, das was ich gepostet habe, ist das beste was du hier 
bekommst. den kannst du direkt übernehmen, noch schnell das VARIABLE 
durch deine variable getauscht und fertig (gut, die funktion zum ein- 
und ausschalten der led musst du auch noch ersetzen, aber ein bit zu 
setzen solltest du hinbekommen)
Warum willst du fertigen code? Kannst du nicht programmieren? Dann such 
dir bitte ein anderes Hobby. Briefmarken sammeln oder so

von D. V. (mazze69)


Lesenswert?

Vielleicht nutzt er die Arduino-IDE und versteht den Background nicht...
Falls Mark BASCOM nutzt, sollte er es sagen.

von Chris L. (kingkernel)


Lesenswert?

Hmm, guter Einwand...

Dann nochmal die Basics:
Welchen Controller benutzt du?
Welche Programmiersprache und welchen Compiler?
Benutzt du ein Entwicklungsboard? Wenn ja, welches?

von Mark (Gast)


Lesenswert?

Danke Chris für den Code, werde den mal versuchen.
Ich mag einfach gute Bibliotheken und finde es unsinnig sehr gute 
Programme anderer nicht zu benutzten nur damit man es selber gemacht 
hat...

von Dr. Sommer (Gast)


Lesenswert?

1
#include <climits>
2
3
template <typename T>
4
void rausblinken (const T input) {
5
  T tmp = input;
6
  for (decltype(CHAR_BIT * sizeof(T)) i = 0; i < (sizeof (T) * CHAR_BIT); i++) {
7
    led_an ();
8
    if (tmp & 1) {
9
      _delay_ms (1000); // Lang blinken
10
    } else {
11
      _delay_ms (500);  // Kurz blinken
12
    }
13
    led_aus ();
14
    tmp >>= 1;
15
  }
16
}
Funktioniert garantiert vollautomatisch mit allen Datentypen und auf 
allen Plattformen mit beliebigen Registerbreiten und ohne 
Barrel-Shifter.

von Sean G. (atmega318)


Lesenswert?

Ja. Damit hast du absolut recht, das ist auch meine Meinung aber sicher 
nicht bei einem sub 20-zeiler!

von Max D. (max_d)


Lesenswert?

Hier noch ein (etwas aus dem Kontext gerissener) Codefetzen. Ich hab den 
für dich einfach schnell aus einem meiner Projekte kopiert.
Der gibt den Inhalt von transmitt[] auf eine Software-Uart über PB2 aus.
Du musst evtl. die Delays anpassen, ich hatte das auf einem mit 
Interrupts vollgespammten tiny44 laufen.
1
for(uint8_t bytecount = 0; bytecount < sizeof(transmitt); bytecount++){
2
      PORTB &= ~(0b00000100);
3
      _delay_us(2500);
4
      for(bitcount=0;bitcount<8;bitcount++){
5
        if(transmitt[bytecount]&(1<<bitcount)) PORTB |= 0b00000100;
6
        else PORTB &= ~(0b00000100);
7
        _delay_us(2500);
8
      }
9
      PORTB |= 0b00000100;
10
      _delay_ms(5);
11
    }

Das ist ein quick&dirty (in 5 minuten hingerotzter) not-mod um ein paar 
Werte aus dem Tiny zu saugen und sollte keinesfalls als Beispiel für 
irgendwas dienen. In der Situation war das aber mein Retter :D.
Also bitte nich hauen ^^

von Stefan W. (dl6dx)


Lesenswert?

Mark schrieb:
> Ich hatte hier irgendwo mal eine Routine gesehen welche den
> Variableninhalt über eine LED rausblinken kann.

Meinst du diesen Thread:
Beitrag "massive led debugging"

Für die anderen Mitleser: Es geht um eine in einer scheinbar statisch 
angesteuerten LED "verborgene" Debug-Ausgabe.

Für die Verwendung derselben LED als Eingang ist hier noch eine sehr 
interessante Literaturangabe:
Beitrag "Re: massive led debugging"

Grüße

Stefan

von TriHexagon (Gast)


Lesenswert?

Mark schrieb:
> Ich mag einfach gute Bibliotheken und finde es unsinnig sehr gute
> Programme anderer nicht zu benutzten nur damit man es selber gemacht
> hat..

Das ist verständlich, nur wie willst du dann jemals lernen und etwas 
eigenes erschaffen? Es wurde schließlich schon so einiges geschrieben. 
Dazu kommt noch, dass du selbst hier schon fertigen Code vorziehst, 
obwohl dazu nur die Basisgrundlagen benötigt werden.

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.