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?
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'.
> 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
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.
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.
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.
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.
Danke für die Hinweise und Lebensweisheiten, leider alle das Thema verfehlt. Ich suche fertigen Code oder einen Link zu einem solchen...
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
Vielleicht nutzt er die Arduino-IDE und versteht den Background nicht... Falls Mark BASCOM nutzt, sollte er es sagen.
Hmm, guter Einwand... Dann nochmal die Basics: Welchen Controller benutzt du? Welche Programmiersprache und welchen Compiler? Benutzt du ein Entwicklungsboard? Wenn ja, welches?
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...
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.
Ja. Damit hast du absolut recht, das ist auch meine Meinung aber sicher nicht bei einem sub 20-zeiler!
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 ^^
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.