mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik IR NEC Signal mit einlesen


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Michael (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Hallo zusammen,

auf die Gefahr hin gleich geseinigt zu werden wollte ich hier mal was 
fragen.

Möchte eine IR- Fernbedienung, die NEC Signale sendet mit einem Atmel 
einlesen.
Dieser soll dann bei bestimmten Tastendruck Funktionen ausführen. (Nur 
Ausgang ansteuern z.B. LED einschalten)
Es ist nur eine Spielerei was ich ausprobieren möchte.

Bin was programmieren angeht eine totale Pfeife.
Möchte da aber bissl was ausprobieren und Versuche machen.
Was ich aber mittlerweile "geschafft" habe, etwas in C zu programmieren,
(besser gesagt zu kopeiren) dass meine Ausgänge angeseuert werden sobald 
ein Taster gedruckt wird :-)
Allerdings möchte ich keinen Taster, sondern das Signal der IR 
Fernbedienung verwenden.
IR Empfänger hab ich, kann ich auch an den Atmel anschließen.


Die Signale der Fernbedieung (nach dem ersten Break Signal) hab ich mit 
dem Oszi ausgelesen und in binär aufgeschreiben.
Der Wert war plausiebel, da die Blöcke invertiert zum vorherigen waren.
Also richtig aufgeschrieben :-)
Hab da ein Bild gefunden, in dem das schön aufgezeichnet war.

Nun weiß ich allerdings nicht wie ich dem Controller "beibringe", dass 
er auf die 11000100 00111011 usw. hören soll.
(wollte jetzt nicht alle 4 Blöcke aufschreiben).

z.B. Wenn PinD5 ist 11000100 ...
(oder diesen Wert in einem anderen Zahlensystem)
Wenn PinD5 ist Taster gedrückt hab ich geschafft, aber nicht, dass er 
auf das IR Signal reagiert :-(

Gibt es dazu ein "Grundprojekt", damit die "Hör auf NEC Protokoll" beim 
Atmel aktiviert wird, bei dem ich dann "einfach" meine ausgelesenen 
Werte eintragen und dem Pin an dem der IR Empfänger angeschlossen ist 
zuweißen kann?
Suche kein kompliziertes alles könnendes (ich nicht versehendes), 
sondern nur auf bestimmte NEC Signale hören.

p.s.
Englischkenntnisse sind so gut wie nicht vorhanden.

Hoffe ich hab mich einigermaßen verständlich ausgedrückt?

Grüße
Michael

Autor: Thomas G. (blasebalg)
Datum:

Bewertung
1 lesenswert
nicht lesenswert

: Bearbeitet durch User
Autor: my2ct (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael schrieb:
> Suche kein kompliziertes alles könnendes (ich nicht versehendes),
> sondern nur auf bestimmte NEC Signale hören.

Dann ist IRMP wohl nichts für dich

Autor: Matthias S. (Firma: matzetronics) (mschoeldgen)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
1. Bau dir einen Empfänger mit der o.a. IRMP Library und compiliere mit 
NEC und NEC42 Unterstützung.
2. Nutze eine serielle Schnittstelle (oder ein LCD) um die Codes deiner 
NEC Fernbedienung (Adresse und Tastencode) herauszufinden.
3. Baue eine Software, die die FB-Adresse durchlässt und dann per 
'switch-case' oder 'if else', um die Tastencodes auszuwerten und damit 
Pins zu schalten.

: Bearbeitet durch User
Autor: Michael (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Hallo,

danke für die Antworten.
Das IRMP hab ich bereits im Vorfeld angeschaut und nix verstanden.
(werd ich auch niemals).
Ich such NUR ein paar Zeilen, dass die Startsequenz beginnt, endet und 
der Tastencode anfängt.
Den TastenCode hab ich bereits per Oszi ausgelesen.

Autor: Wolfgang (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael schrieb:
> Das IRMP hab ich bereits im Vorfeld angeschaut und nix verstanden.
> (werd ich auch niemals).

Mit deinem Smartphone, falls du Besitzer eines solchen bist, wird es dir 
nicht viel anders ergehen. Benutzen kann man es trotzdem.

Autor: Matthias S. (Firma: matzetronics) (mschoeldgen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael schrieb:
> Ich such NUR ein paar Zeilen, dass die Startsequenz beginnt, endet und
> der Tastencode anfängt.

Ich habe den Eindruck, das du keine Ahnung hast, wie schwierig es ist, 
z.B. Codes anderer Fernbedienungen, Störungen des IR Empfängers und 
Situationen wie nur teilweise empfangene Codes auszublenden. Genau das 
macht IRMP in nahezu perfekter Manier und deswegen ist es wirklich 
sinnvoll, sich lieber ein paar Stunden mit IRMP zu beschäftigen, anstatt 
zu probieren, das Rad neu zu erfinden.
Immerhin hast du damit auch eine Basis für andere Projekte und lernst 
nebenbei noch eine Menge.

Autor: Nec Decoder (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fertige Zeilen in C habe ich nicht, aber in PIC Assembler wie folgt 
gelöst:

Eine mögliche Vorgehensweise zum Erkennen der Startsequenz:
Bei fallender Flanke des IR Empfängers einen Timer starten, der länger 
als 9ms Laufzeit hat. z.B einen 8Bit Timer mit 64µs Taktrate ergibt 
16,384ms Messzeit.
Tritt nun eine folgende steigende Flanke auf, so kann man den Timerwert 
prüfen. Liegt er z.B. unterhalb von 8,5ms oder oberhalb von 9,5ms oder 
ist er sogar übergelaufen, so verlässt man die Routine und beginnt sie 
von Neuem. Also wieder auf eine fallende Flanke warten. Liegt die 
Messung im gewünschten Toleranzfenster so wurde die 9ms Lowphase 
erkannt. Die Routine wird nicht verlassen sondern der Timer erneut 
genullt und auf dieselbe Weise wird überprüft, ob der 9ms Lowphase eine 
4,5ms Highphase folgt. Wird etwas anderes als die 4,5ms plus minus 
Toleranz erkannt, so wird die Routine hier verlassen und wieder ganz von 
Vorne begonnen. Wurde aber auch die 4,5ms Highpase korrekt erkannt, so 
ist die Startsequenz detektiert und es kann  nun ans Einlesen der 
Datenbits gehen.

Zuerst wird die 8Bit Geräteadresse eingelesen und zwischengespeichert, 
dann wird die invertierte Geräteadresse eingelesen und auf 
Übereinstimmung mit der zuvor eingelesenen überprüft. Bei Abweichung... 
Routine verlassen und wieder von Vorne.

Bei Übereinstimmung geht es mit dem Einlesen des 8Bit Kommandos weiter. 
Dieses wird dann im zweiten Lesevorgang mit dem invertierten Kommando 
verglichen.
Abweichung = Routine verlassen. Übereinstimmung = weitermachen.

Zur Sicherheit den kompletten Vorgang mehrfach wiederholen, also nicht 
nur ein einziges Protokoll einlesen sondern zwei oder drei 
aufeinanderfolgende und diese dann auf Übereinstimmung prüfen. Wenn 
mehrere aufeinanderfolgende übereinstimmen kann man davon ausgehen 
richtig empfangen zu haben.
Nun kann das gelesene Kommando mit den bekannten Kommandos verglichen 
und die dem Kommando entsprechende Aktion ausgeführt werden.

Die Leseroutine arbeitet ebenfalls mit dem Timer, aber diesmal auf 
2,048ms Overflow eingestellt. Läuft er über wurde nichts Sinvolles 
erkannt.
Zum Lesen der 8Bit wird erneut auf eine fallende Flanke gewartet und 
dann der Timer gestartet wenn sie auftritt. Danach folgt entweder 560µs 
Lowpegel weil eine 0 gesendet wurde oder 1,69ms Lowpegel weil eine 1 
gesendet wurde. Unterscheiden läasst sich das indem man z.B. nach ca. 
830µs den Pegel einliest. Ist er hier noch Low so liegt das an der 
langen Lowpegel Phase weil eine "1" gesendet wurde. Ist er hier bereits 
wieder High, so liegt das an der kurzen Lowphase weil eine "0" gesendet 
wurde.
Auf diese Art un Weise werden in einer Loop jeweils 8Bit eingelesen. 
Läuft der Timer über ist etwas schief gelaufen, also Routine verlassen 
und alle Daten verwerfen. Läuft er nicht über so hat man etwas mit einer 
gewissen Sicherheit/Unsicherheit empfangen, nämlich nur einmal. Deshalb 
macht es Sinn, mehrfach zu lesen und auf Übereinstimung zu prüfen.

Autor: Nec Decoder (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Nec Decoder schrieb:
> Danach folgt entweder 560µs
> Lowpegel weil eine 0 gesendet wurde oder 1,69ms Lowpegel weil eine 1
> gesendet wurde. Unterscheiden läasst sich das indem man z.B. nach ca.
> 830µs den Pegel einliest. Ist er hier noch Low so liegt das an der
> langen Lowpegel Phase weil eine "1" gesendet wurde. Ist er hier bereits
> wieder High, so liegt das an der kurzen Lowphase weil eine "0" gesendet
> wurde.

Dieser Text bezieht sich auf das IR Signal. Der Emfpänger liefert aber 
die Pegel genau umgekehrt. Also sind die Einsen und Nullen hier genau 
umgekehrt wie oben beschrieben.
Anbei noch ein Bild wie der Code am Empfängerausgang aussieht.

Autor: Frank M. (ukw) (Moderator) Benutzerseite
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Michael schrieb:
> Das IRMP hab ich bereits im Vorfeld angeschaut und nix verstanden.

1. IRMP-Source herunterladen

Klicke auf IRMP: Download

2. IRMP-Quellen ins Projekt einfügen

Klicke auf IRMP: Source-Code

3. irmp-main-avr.c als main-Modul hinzufügen oder Inhalt
   ins vorgefertigte main.c kopieren

Klicke auf IRMP: Source-Code unter "Beispiele ..."

4. F_CPU im Projekt setzen

Klicke auf IRMP: Source-Code und rolle vor bis zum roten Kasten: 
"Wichtig"

5. irmpconfig.h: Setze alle IRMP_SUPPORT_xxx_PROTOCOL auf 0
   IRMP_SUPPORT_NEC_PROTOCOL auf 1

Klicke auf IRMP: IRMP SUPPORT xxx PROTOCOL

Du kannst die Stelle aber auch so lassen wie es ist. Dann "versteht" 
Dein µC sogar noch ein paar weitere Fernbedienungen, die außerdem noch 
in Deinem Haushalt rumschwirren.

6. irmpconfig.h: IRMP_PORT_LETTER + IRMP_BIT_NUMBER definieren

Klicke erst auf IRMP: IRMP SUPPORT xxx PROTOCOL und
rolle bis zum nächsten Unterkapitel vor.

7. Projekt kompilieren und Programm flashen

Klicke dazu auf die Dokumentation Deiner eingesetzten IDE.

8. USB-UART-Adapter an µC-UART anschließen und sich über
   Ausgabe bei jedem Fernbedienungs-Tastendruck freuen

Klicke jetzt nicht, sondern schnapp Dir Bleistift und Zettel und notiere 
Dir nun jeden empfangenen Code samt Tastennamen auf dem Zettel.

Geschätzter Aufwand: 15 Minuten für den fortgeschrittenen Anwender, 
halbe bis ganze Stunde für den Anfänger. Bis dahin hast Du gerade eine 
Handvoll von Zeilen Deines NEC-Decoders überhaupt geschrieben bzw. aus 
anderen Quellen zusammengeklaubt.

Wenn alle Schritte 1-8 erfolgreich waren:

9. Anpassungen von main(), um IR-Signale auszuwerten und in
    Aktionen umzusetzen. Dazu obigen Zettel einsetzen.

Klicke dazu auf IRMP: Anwendung von IRMP

War das jetzt sooo schwierig? Oder ist es Dir zu anstrengend einen 
Artikel wie IRMP überhaupt sinnentnehmend zu lesen?

Merke: IRMP bekommst Du geschenkt. Aber deshalb ist freie Software nicht 
immer kostenlos. Man muss schon etwas reinstecken: Es nennt sich 
"Aufwand". Aber dieser ist dank der IRMP-Dokumentation äußerst 
niedrig. Rausreden kannst Du Dich mit Deinen nicht vorhandenen 
Englischkenntnissen jedenfalls nicht: Der Artikel ist in deutsch 
verfasst.

: Bearbeitet durch Moderator
Autor: Michael (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

hab jetzt fast 2 Tage damit verbracht das Standard IRMP Projekt inkl. 
UART Ausgabe in Studio 6 zum Laufen zu bringen.
Das funktioniert und ich kann die Tastensignale anschauen. :-)

Jetzt versuch ich seit 1 Tag eine LED zum Blinken im Takt zu bringen 
solange eine Taste gedrückt ist.
Aber da scheiterst gewaltig... (Es passiert einfach mal nix, egal was 
ich schreib)

Ja, ich hab den Artikel gelesen, hilft MIR aber nicht weiter.
Kann nicht mal einschätzen wo der Fehler liegt. (oder die Fehler)
Evtl. schon ganz am Anfang bei der Zuordnung der Ein/ Ausgänge beim 
Mega8 oder dann doch an den paar Zeilen die ich geschrieben und aus 
einem anderen funktionierenden Projekt rauskopiert habe.

Mein "Werk" beginnt ab main (void)
sowie oben die 16MHz, die ich reingeschrieben habe.

Hat evtl. jemand einen Tip?

Grüße
Michael

Autor: Matthias S. (Firma: matzetronics) (mschoeldgen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
     (irmp_data.protocol == IRMP_NEC_PROTOCOL &&        // NEC-Protokoll
       irmp_data.address == 0xDC23            // Adresse 0xDC23
       && irmp_data.command == 0x0014 |          // Taste Vol+
       irmp_data.protocol == IRMP_NEC_PROTOCOL && 
       irmp_data.address == 0xDC23        
       && irmp_data.command == 0x0017 )          // Taste Pfeil oben  
       {
Das sieht zu kompliziert aus. Teste einmal in der Hauptschleife auf NEC 
Protokoll und die Adresse, dann mache aus irmp_data.command ein 
switch-case Konstrukt.
Dann musst du nicht jedesmal alles abfragen.
Das mit dem Repetition Flag klappt nicht bei allen Fernbedienungen. Lass 
es besser weg und löse die Tastenwiederholung durch das Durchlaufen der 
Hauptschleife.

Autor: Frank M. (ukw) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael schrieb:
> hab jetzt fast 2 Tage damit verbracht das Standard IRMP Projekt inkl.
> UART Ausgabe in Studio 6 zum Laufen zu bringen.
> Das funktioniert und ich kann die Tastensignale anschauen. :-)

Gratuliere erst einmal zu Deinem Durchhaltevermögen :-)
Ich nehme an, dass Du dabei auch einiges gelernt hast.

Matthias S. schrieb:
> Das sieht zu kompliziert aus.

Das ist nicht nur viel zu kompliziert, sondern auch mit einigen Fehlern 
gespickt.

Zum Beispiel sollte man statt dem bitweisen Operator '|' besser den 
Logik-Operator '||' verwenden, wenn man Bedingungen miteinander 
verknüpfen möchte.

Außerdem ist das hier falsch:
while (IRMP_FLAG_REPETITION == 0x01)

IRMP_FLAG_REPETITION ist eine Konstante, nämlich exakt 0x01. Diese 
ändert sich nie. Damit wird das zu einer Endlosschleife. Das Programm 
hängt sich hier sprichwörtlich auf.

@Michael: Du hast offenbar gewaltige Lücken bei Deinen C-Kenntnissen. So 
wird das schwierig.

Was möchtest Du? Eine LED leuchten lassen, solange eine Taste gedrückt 
ist?

Hier mal eine mögliche Lösung, dabei musst Du die ISR und main() durch 
den unteren Code ersetzen. Dabei vermeide ich grundsätzlich 
Delay-Funktionen, die nur das Programm ausbremsen. Dann verhält sich das 
Programm träge und reagiert nicht so schnell, wie man möchte. Wenn ich 
sowieso eine Timer-Routine habe, dann sollte ich sie auch nutzen!

Zunächst definieren wir eine globale Variable als Countdown, die jede 
Millisekunde heruntergezählt wird:
static volatile unsigned char msec_counter;     // Countdown, wird jede Millisekunde heruntergezaehlt

Jetzt bauen wir in die ISR den Countdown ein:
ISR(COMPA_VECT)                                 // Timer1 ISR, called every 1/15000 sec
{
    static uint8_t cnt;                         // Zaehlvariable, wird bei jedem Aufruf um 1 inkrementiert

    (void) irmp_ISR();                          // call irmp ISR

    cnt++;

    if (cnt == F_INTERRUPTS / 1000)             // Wenn cnt == 15, ist eine Millisekunde vergangen
    {
        cnt = 0;                                // cnt zuruecksetzen

        if (msec_counter > 0)                   // Countdown herunterzaehlen
        {
            msec_counter--;
        }
    }
}

Jetzt die main-Funktion. Sie prüft das IR-Protokoll und die Adresse nur 
einmal.
int
main (void)
{
    IRMP_DATA   irmp_data;

    DDRB = 0b11111111;                          // Alle auf B sind als Ausgaenge definiert
    DDRC = 0b11001111;                          // PC4, PC5 Eingaenge
    DDRD = 0b11110011;                          // PD2, PD3 Eingaenge (D2= IR IN; IR auch in IRMPConfig.h eingestellt!

    irmp_init();                                // initialize IRMP
    timer1_init();                              // initialize timer1

    sei ();                                     // enable interrupts

    for (;;)
    {
        if (irmp_get_data (&irmp_data))
        {
            if  (irmp_data.protocol == IRMP_NEC_PROTOCOL &&         // NEC-Protokoll
                 irmp_data.address == 0xDC23)                       // Adresse 0xDC23
            {
                if (irmp_data.command == 0x0014 ||                  // Taste Vol+ oder
                    irmp_data.command == 0x0017)                    // Taste Pfeil oben
                {
                    PORTD |= (1<<PD0);                              // Ausgang PD0 ansteuern
                    msec_counter = 200;                             // countdown auf 200 (maximal 255 moeglich!)
                }
                else if (irmp_data.command == 0x0015 ||             // Taste Vol- oder
                         irmp_data.command == 0x0018)               // Taste Pfeil unten
                {
                    PORTD |= (1<<PD1);                              // Ausgang PD1 ansteuern
                    msec_counter = 200;                             // countdown auf 200 (maximal 255 moeglich!)
                }
            }
        }
        else if (msec_counter == 0)                                 // 200 msec vergangen...
        {
            PORTD &= ~((1<<PD0) | (1<<PD1));                        // PD0 und PD1 zuruecksetzen
        }
    }
}

Immer, wenn eine Taste erkannt wurde, wird die entsprechende LED 
eingeschaltet. Wurde 200msec kein IR-Signal erkannt, werden beide LEDs 
wieder abgeschaltet.

Wie funktioniert das? Wenn eine LED eingeschaltet wird, wird der 
Countdown-Zähler auf 200 gesetzt. In der ISR wird dieser Countdown dann 
jede Millisekunde heruntergezählt. Sobald der Wert 0 ist, werden die 
LEDs gelöscht.

Wenn Du LED1 und LED2 vom Timing her getrennt behandeln willst, musst Du 
für jede LED einen eigenen Countdown-Zähler einbauen. Aber normalerweise 
willst Du offenbar immer nur eine LED leuchten lassen, wenn eine 
Taste gedrückt wurde. Probiere es also aus und berichte, ob das für Dich 
so passt oder nicht.

Das Programm ist ungetestet. Wenn etwas nicht so läuft wie beschrieben, 
melde Dich bitte.

: Bearbeitet durch Moderator
Autor: Frank M. (ukw) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alternativ könnte man auch je eine EIN-Taste und eine AUS-Taste für jede 
LED definieren. Dann braucht man den Millisekunden Countdown gar nicht 
und die ISR- und main-Funktion kann man dann folgendermaßen schreiben:
ISR(COMPA_VECT)                                 // Timer1 ISR, called every 1/15000 sec
{
    (void) irmp_ISR();                          // call irmp ISR
}

int
main (void)
{
    IRMP_DATA   irmp_data;

    DDRB = 0b11111111;                          // Alle auf B sind als Ausgaenge definiert
    DDRC = 0b11001111;                          // PC4, PC5 Eingaenge
    DDRD = 0b11110011;                          // PD2, PD3 Eingaenge (D2= IR IN; IR auch in IRMPConfig.h eingestellt!

    irmp_init();                                // initialize IRMP
    timer1_init();                              // initialize timer1

    sei ();                                     // enable interrupts

    for (;;)
    {
        if (irmp_get_data (&irmp_data))
        {
            if  (irmp_data.protocol == IRMP_NEC_PROTOCOL &&         // NEC-Protokoll
                 irmp_data.address == 0xDC23)                       // Adresse 0xDC23
            {
                switch (irmp_data.command)
                {
                    case 0x0014: PORTD |= 1<<PD0; break;            // Taste Vol+: PD0 ein
                    case 0x0015: PORTD &= ~(1<<PD0); break;         // Taste Vol-: PD0 aus
                    case 0x0017: PORTD |= 1<<PD1; break;            // Taste Pfeil oben: PD1 ein
                    case 0x0018: PORTD &= ~(1<<PD1); break;         // Taste Pfeil unten: PD1 aus
                }
            }
        }
    }
}

Die ISR kannst Du in diesem Fall wieder auf den Aufruf von irmp_ISR() 
reduzieren, den Kram mit dem msec_counter kannst du komplett aus dem 
Source wieder löschen. Jetzt ist die main()-Funktion noch einfacher 
geworden.

Aber wie gesagt: Jetzt brauchst Du für jede Ein-/Aus-Funktion immer 
jeweils 2 Tasten.

: Bearbeitet durch Moderator
Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Super,
Dankeschön. :-)
Meine C Kenntnisse sind gleich Null.
Hab das nie gelernt bzw. beigebracht bekommen.
Versuche selber etwas damit rum zu probieren.

Spiele momentan mit beiden Varianten (die erste und die zweite mit den 
switch)

Wollte nun einen Schritt weiter gehen und noch dazu Eingänge abfragen.
den ersten Fall mit einer Taste,
den zweiten mit dem switch und zwei tasten
zusätzlich das mit dem Eingang abfragen

Auf bestimmtes Fernbedienungssignal UND einen high Pegel am Atmel.
Erst dann soll der Ausgang geschaltet werden.

Was möchte ich nun probieren?
Eine Tast soll unterschiedliche Ausgänge ansteuern.
Je nach dem welcher Eingang high ist soll der andere Ausgang angesteuert 
werden.
Versucht hab ich das:
Mit && wird ein Ausgang angesteuert egal was an dem PIN anliegt.
Mit & wird garnix mehr angesteuert.

else if ((irmp_data.command == 0x0050) &&  // Taste MENU
  (PINC & (1<<PINC5)))      // PC5 = high  ->einlesen Funktioniert NICHT
  {
  PORTC |= (1<<PC1);                       // Ausgang PC1 ansteuern, da 
PC5 hight ist
  msec_counter = 200;                      // countdown auf 200 (maximal 
255 moeglich!)
  }

else if ((irmp_data.command == 0x0050) &&  // Taste MENU
  (PINC & (1<<PINC4)))      // PC4 = high  ->einlesen Funktioniert NICHT
  {
  PORTC |= (1<<PC2);                      // Ausgang PC2 ansteuern, da 
PC4 high ist
  msec_counter = 200;                     // countdown auf 200 (maximal 
255 moeglich!)
  }

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Meinen vorherigen Beitrag bitte erstmal ignorieren.
Hab den Fehler gefunden...
Lag an meiner Versuchs HW (Steckbrett; teils fliegender Aufbau)

Werd mich nun an einen weiteren Versuch wagen.

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.

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