Forum: Mikrocontroller und Digitale Elektronik IR Sender Projekt Irsnd


von Hans F. (hans_f83)


Lesenswert?

Hallo zusammen,

seit einigen Wochen versuche ich mit einem ATMega8 IR Signale (NEC 
Codierung) zu senden.

Der AVR ist für mich (als Programmierer oh Schande) noch ziemliches 
Neuland
nach jetzt so etlichen Fehlversuchen, bei denen ich aber viel gelernt 
habe,
bin ich jetzt auf das Irsnd Projekt hier im Forum gestoßen.

Erstmal RESPEKT!!!
Hier steckt richtig viel Arbeit und Wissen drin!!!

Ich habe dann mal versucht den Code im AVR Studio (letzte Version) zu 
compilieren. Dabei bekomme ich nachfolgende Errors, die ich nicht 
aufgelöst bekomme.

Ich habe die im Zip enthaltenen Files mal auf die fehlenden 
Deklarationen untersucht, es gibt sie nicht.

Was mache ich falsch?
Hoffe mir kann hier jemand auf die Sprünge helfen.

Was ich auch nicht verstanden habe, wo deklariere ich den von mir 
verwendeten AVR? Oder ist das schon vom Studio erledigt, wenn ich dort 
den
Mega8 konfiguriere?

1
Fehler  4  'COM2B0' undeclared (first use in this function)  
2
Fehler  6  'COM2B0' undeclared (first use in this function)  
3
Fehler  12  'DDRIRSND_PORT_LETTER' undeclared (first use in this function)  
4
Fehler  8  'IRSND_BIT_NUMBER' undeclared (first use in this function)  
5
Fehler  11  'IRSND_BIT_NUMBER' undeclared (first use in this function)  
6
Fehler  9  'OCR2A' undeclared (first use in this function)  
7
Fehler  7  'PORTIRSND_PORT_LETTER' undeclared (first use in this function)  
8
Fehler  10  'PORTIRSND_PORT_LETTER' undeclared (first use in this function)  
9
Fehler  2  'TCCR2A' undeclared (first use in this function)  
10
Fehler  5  'TCCR2A' undeclared (first use in this function)  
11
Fehler  13  'TCCR2A' undeclared (first use in this function)  
12
Fehler  14  'TCCR2B' undeclared (first use in this function)  
13
Fehler  1  #error Wrong value for IRSND_OCx, choose IRSND_OC2 in 
14
irsndconfig.h


PS: Das Projekt das ich hiermit umsetzen möchte, ist die Lenkrad 
Fernbedienung meines Fz. an ein Aftermarkt Radio zu koppeln.

Hans

von Karl H. (kbuchegg)


Lesenswert?

Verwendest du das 6-er Studio?

Hab mir das auch mal geholt und zu meiner Schande muss ich sagen, dass 
ich es in 10 Minuten auch nicht rausgekriegt habe was da los ist.

Hol dir ein 4-er Studio, dafür ist das Aps-File dafür im Zip-File. 
Laden, auf Mega8 umstellen und dann sollte das problemlos compilieren.


(Hab ein 6.0.1843 aber benutze es nur ungern)

von Hans F. (hans_f83)


Lesenswert?

Ja ich nutze das 6er Studio!

Danke für den Tip, ich werde das mal versuchen.

Ich glaube ich hab noch irgendwo ein altes 4er Studio.
Hoffe nur das läuft noch unter W7 64Bit.

Wobei ich sagen muss, das 6er ist mir sehr sympatisch, liegt vieleicht 
an der Ähnlichkeit zum Visual Studio 10

Gruss Hans

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Hans F. schrieb:
> Fehler  1  #error Wrong value for IRSND_OCx, choose IRSND_OC2 in
> irsndconfig.h

Bitte zeig mal die irsndconfig.h.

Gruß,

Frank

von Karl H. (kbuchegg)


Lesenswert?

Kann das daher kommen, dass das 6-er Studio den Mega8 nicht mehr 
unterstützt (fällt mir gerade ein).


Denn. Im Code ist das alles mit #ifdef geregelt und eigentlich sollten 
die entsprechenden #define ja durch Auswahl des Prozessors ja schon 
vorhanden sein.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Karl Heinz Buchegger schrieb:
> Kann das daher kommen, dass das 6-er Studio den Mega8 nicht mehr
> unterstützt (fällt mir gerade ein).

Kann gut sein, da hatte ich erst gestern hier im Forum etwas dazu 
gelesen, zumindest was das Flashen eines ATmega8 betrifft. Das hat mich 
schon sehr verwundert - auch wenn der ATmega8 wirklich ein uraltes Teil 
ist.

Dann muss der TO halt das 4er oder 5er AVR-Studio nehmen oder den 
ATmega8 gegen einen ATmega88 oder ATmega168 tauschen. Letzteres würde 
ich auf jeden Fall machen, für mich zumindest ist der ATmega8 obsolet.

> Denn. Im Code ist das alles mit #ifdef geregelt und eigentlich sollten
> die entsprechenden #define ja durch Auswahl des Prozessors ja schon
> vorhanden sein.

Eben, diese ifdefs machen es eigentlich ziemlich einfach.

Trotzdem muss der TO noch den PWM-Pin in irsndconfig.h auswählen, 
nämlich hier:
1
/*---------------------------------------------------------------------------------------------------------------------------------------------------
2
 * AVR section:
3
 *
4
 * Change hardware pin here:                    IRSND_OC2  = OC2  on ATmegas         supporting OC2,  e.g. ATmega8
5
 *                                              IRSND_OC2A = OC2A on ATmegas         supporting OC2A, e.g. ATmega88
6
 *                                              IRSND_OC2B = OC2B on ATmegas         supporting OC2B, e.g. ATmega88
7
 *                                              IRSND_OC0  = OC0  on ATmegas         supporting OC0,  e.g. ATmega162
8
 *                                              IRSND_OC0A = OC0A on ATmegas/ATtinys supporting OC0A, e.g. ATtiny84, ATtiny85, ATtiny87/167
9
 *                                              IRSND_OC0B = OC0B on ATmegas/ATtinys supporting OC0B, e.g. ATtiny84, ATtiny85
10
 *---------------------------------------------------------------------------------------------------------------------------------------------------
11
 */
12
#if defined(ATMEL_AVR)
13
#  define IRSND_OCx                             IRSND_OC2B              // use OC2B

Hier müsste er IRSND_OC2 auswählen, denn der alte ATmega8 kennt kein 
OC2A oder OC2B.

Gruß,

Frank

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Der Assembler des 6-er Studios geht wunderbar und unterstützt auch den 
Mega 8 ;-).

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Ich habs gerade mal im 4er Studio getestet. Ich kann das Problem 
reproduzieren, hier kommen dieselben Fehlermeldungen.

Der Grund ist die oben angegebene falsche Einstellung in irsndconfig.h. 
Der TO muss hier bei einem ATmega8 IRSND_OC2 einstellen, dann gehts ohne 
Warnungen/Fehler durch den Compiler.

Steht aber auch hier im IRMP-Artikel:

  http://www.mikrocontroller.net/articles/IRMP#Einstellungen_in_irsndconfig.h

Als Autor des IRMP-Pakets frage ich dann mal in die Runde:

Kann ich das noch "idiotensicherer" machen? Ich meine, die ausgegebene 
Meldung
1
#error Wrong value for IRSND_OCx, choose IRSND_OC2 in irsndconfig.h

ist doch eigentlich aussagekräftig genug?

von Vlad T. (vlad_tepesch)


Lesenswert?

Frank M. schrieb:
> Kann ich das noch "idiotensicherer" machen?
Wenn du etwas idiotensicheres erfunden hast, erfindet irgendjemand einen 
besseren Idioten.
;)

zum Beispiel einen, der die Fehlerliste alphabetisch sortiert, anstatt 
nach Reihenfolge des Auftretens.

von Karl H. (kbuchegg)


Lesenswert?

Frank M. schrieb:

> Kann ich das noch "idiotensicherer" machen? Ich meine, die ausgegebene
> Meldung
>
>
1
> #error Wrong value for IRSND_OCx, choose IRSND_OC2 in irsndconfig.h
2
>
>
> ist doch eigentlich aussagekräftig genug?

Die ist ok.

Das erklärt aber nicht die anderen Fehler, die im 6-er kommen, wie zb
Fehler  4  'COM2B0' undeclared (first use in this function)
Fehler  9  'OCR2A' undeclared (first use in this function)


und die sind mir komplett unklar. Denn das stammt alles aus io.h

von Vlad T. (vlad_tepesch)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Das erklärt aber nicht die anderen Fehler, die im 6-er kommen, wie zb
> Fehler  4  'COM2B0' undeclared (first use in this function)
> Fehler  9  'OCR2A' undeclared (first use in this function)

Das werden Folgefehler des ersten sein, oder nicht

von Karl H. (kbuchegg)


Lesenswert?

Vlad Tepesch schrieb:
> Karl Heinz Buchegger schrieb:
>> Das erklärt aber nicht die anderen Fehler, die im 6-er kommen, wie zb
>> Fehler  4  'COM2B0' undeclared (first use in this function)
>> Fehler  9  'OCR2A' undeclared (first use in this function)
>
> Das werden Folgefehler des ersten sein, oder nicht

Das sind die ersten. Das ist ja das interessante.


(Wobei ich sagen muss, das ich das 6-er Studio nicht leiden kann. Nach 5 
Minuten hab ich immer noch nicht die Stelle gefunden, wo man die 
Taktfrequenz eintragen kann. Ich habs dann mit einem Command Line 
#define in den Compiler Options gemacht. Genauso wie _ATMega8_ (bitte 
nicht auf die Schreibweise festnageln, aus dem Kopf), aber das hat alles 
nichts gebracht.

von Düsendieb (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> wo man die
> Taktfrequenz eintragen kann

Die kann amn in der 5. er Version einfach bei der Processor View 
überschreiben. Dann merkt er sich die. Hat mich aber auch einige Zeit 
gekostet.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Karl Heinz Buchegger schrieb:
> Das sind die ersten. Das ist ja das interessante.

Nein der erste Fehler ist:
1
#error Wrong value for IRSND_OCx, choose IRSND_OC2 in irsndconfig.h

Der TO hat die Fehler umsortiert und dafür die Fehlermeldungen 
durchnummeriert.

So siehts im AVR-Studio 4 aus:
1
Build started 23.11.2012 at 10:26:56
2
avr-gcc  -mmcu=atmega8 -Wall -gdwarf-2 -std=gnu99                       -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT irsnd.o -MF dep/irsnd.o.d  -c  ../irsnd.c
3
../irsnd.c:68:6: error: #error Wrong value for IRSND_OCx, choose IRSND_OC2 in irsndconfig.h
4
../irsnd.c: In function 'irsnd_on':
5
../irsnd.c:386:9: error: 'TCCR2A' undeclared (first use in this function)
6
../irsnd.c:386:9: note: each undeclared identifier is reported only once for each function it appears in
7
../irsnd.c:386:23: error: 'COM2B0' undeclared (first use in this function)
8
../irsnd.c: In function 'irsnd_off':
9
../irsnd.c:436:9: error: 'TCCR2A' undeclared (first use in this function)
10
../irsnd.c:436:24: error: 'COM2B0' undeclared (first use in this function)
11
../irsnd.c:446:1: error: 'PORTIRSND_PORT_LETTER' undeclared (first use in this function)
12
../irsnd.c:446:29: error: 'IRSND_BIT_NUMBER' undeclared (first use in this function)
13
../irsnd.c: In function 'irsnd_set_freq':
14
../irsnd.c:515:9: error: 'OCR2A' undeclared (first use in this function)
15
../irsnd.c: In function 'irsnd_init':
16
../irsnd.c:599:1: error: 'PORTIRSND_PORT_LETTER' undeclared (first use in this function)
17
../irsnd.c:599:28: error: 'IRSND_BIT_NUMBER' undeclared (first use in this function)
18
../irsnd.c:600:1: error: 'DDRIRSND_PORT_LETTER' undeclared (first use in this function)
19
../irsnd.c:610:9: error: 'TCCR2A' undeclared (first use in this function)
20
../irsnd.c:614:11: error: 'TCCR2B' undeclared (first use in this function)
21
make: *** [irsnd.o] Error 1
22
Build failed with 13 errors and 0 warnings...

Damit ist der COM2B0-Fehler ein Folgefehler - in irsnd.c

> (Wobei ich sagen muss, das ich das 6-er Studio nicht leiden kann.

Geht mir genauso.

von xfr (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Das sind die ersten. Das ist ja das interessante.

Die Liste oben ist sinnfreier Weise alphabetisch sortiert 
(Standardeinstellung?). Fehler Nummer 1 ist "#error Wrong value for 
IRSND_OCx, choose IRSND_OC2 in irsndconfig.h", die anderen kommen erst 
danach.

Die Option zum Eintragen der Taktfrequenz gibt es afaik nicht mehr. 
Könnte mir vorstellen, dass das rausgenommen wurde, weil man als 
Anfänger leicht annehmen konnte, dass der Prozessor dann wirklich mit 
der Taktfrequenz läuft, obwohl damit ja nur das Makro F_CPU definiert 
wurde.

von Karl H. (kbuchegg)


Lesenswert?

Frank M. schrieb:
> Karl Heinz Buchegger schrieb:
>> Das sind die ersten. Das ist ja das interessante.
>
> Nein der erste Fehler ist:
>
>
1
> #error Wrong value for IRSND_OCx, choose IRSND_OC2 in irsndconfig.h
2
>
>
> Der TO hat die Fehler umsortiert und dafür die Fehlermeldungen
> durchnummeriert.
>
> So siehts im AVR-Studio 4 aus:

Ah. Im 4-er
Ich hatte das 6-er gemeint.

(Kann allerdings wirklich sein, dass ich da eine Gedächtnislücke haben.)

von Karl H. (kbuchegg)


Lesenswert?

xfr schrieb:
> Karl Heinz Buchegger schrieb:
>> Das sind die ersten. Das ist ja das interessante.
>
> Die Liste oben ist sinnfreier Weise alphabetisch sortiert
> (Standardeinstellung?).

Das ist jetzt aber nicht dein Ernst. Oder?

Doch, doch. Jetzt wo du es sagst - da ist mir schon aufgefallen, das bei 
den Fehlermeldungen eine Zahl dabei steht und das die durcheinander 
sind. Aber das das die Reihenfolge der auftretenden Fehler ist, darauf 
wär ich nicht gekommen. Wer macht denn sowas? Und warum ist die 
Sortierung nach Nummern nicht Default? Und warum kann man die dauerhaft 
umstellen?

Ich hab mich lieber darüber geärgert, dass ich da wahlfrei auf den 
'Error' Tab bzw. 'Warning' Tab klicke und sich die Anzeige ändert - oder 
auch nicht. Gleich darauf hab ich beschlossen, das so schnell wie 
möglich wieder zuzumachen und aufzugeben. Weil mir das zu blöd ist, wenn 
ich mich mit Werkzeug rumärgern muss :-)

Alles in allem sind in der Version des 6-er, die ich habe, so viele 
Kleinigkeiten die mich nerven, dass ich wirklich keine Lust verspüre, da 
drauf zu wechseln. Da leb ich lieber noch ein weilchen mit dem 4-er. Das 
ist zwar auch nicht perfekt, aber gut genug, so dass mir das Studio 
nicht dauernd in die Quere kommt.

> Könnte mir vorstellen, dass das rausgenommen wurde, weil man als
> Anfänger leicht annehmen konnte, dass der Prozessor dann wirklich mit
> der Taktfrequenz läuft, obwohl damit ja nur das Makro F_CPU definiert
> wurde.

Spricht nicht gerade für die Produktentwickler. Wenn man in einer GUI 
etwas missverstehen kann (was vorkommen kann), dann ist das eine Frage 
der Präsentation. Oftmals reicht schon ein besserer Text im zugehörigen 
Label.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Karl Heinz Buchegger schrieb:
> Ah. Im 4-er
> Ich hatte das 6-er gemeint.

Ja, 4er, aber mit gcc 4.7.2.

Ich kanns einfach nicht glauben, dass der 6er gcc-Meldungen neu sortiert 
und dann

   Fehler 2
   Fehler 3
   Fehler 1

vor die eigentlichen gcc-Meldungen schreibt. Echt wahr?

von xfr (Gast)


Lesenswert?

Es gibt eine Liste mit Fehlern und Warnungen, die hat mehrere Spalten:
- Symbol für Fehler/Warnung (wird bei Copy+Paste zu "Error" oder 
"Warning")
- Die obige Nummer
- Beschreibung (nach der wurde sortiert)
- Datei
- Zeile
- Spalte
- Projekt

Man kann nach jeder dieser Spalten sortieren, indem man auf das 
entsprechende Label klickt. Kann schon sein, dass es in der 
Standardeinstellung nach Beschreibung sortiert wird, was natürlich 
Blödsinn wäre. Oder der TO hat mal aus Versehen drauf geklickt.

Man kann nach Fehlern, Warnungen und Nachrichten filtern (Ein- und 
Ausblenden dieses Typs durch Klicken auf das Label, funktioniert bei mir 
absolut deterministisch ;-)). Wenn man möchte, kann man sogar die 
Reihenfolge der Spalten ändern.

Die normale Textausgabe des Compilers gibt es natürlich auch noch, in 
einem eigenen Fenster. Das sind vielleicht etwas mehr Möglichkeiten, als 
man in AVR Studio 4 hat, aber schlecht gelöst kann man das imo nicht 
nennen.

Nach der F_CPU-Einstellung habe ich allerdings auch lange gesucht und 
hätte die lieber als eigene Option. Bin ebenfalls der Meinung, dass eine 
klare Beschreibung reichen sollte, um Missverständnisse zu vermeiden.

von Vlad T. (vlad_tepesch)


Lesenswert?

ich liebe diese Fehlerübersicht im VS.

wenn man mehr details braucht doppelklickt man halt den Fehler an und 
wechselt ins Buildoutput-Tab, wo er direkt zum angeklickten Fehler 
gesprungen ist, ebenso wie er im Code zum entsprechenden Fehler springt

von Hans F. (hans_f83)


Lesenswert?

Ja das wars,

jetzt gehts schon mal durch den Compiler :)

Umsortiert hab ich da jedenfalls nichts, zumindest nicht bewußt.
Es scheint aber so als wenn das Studio sich die Sortierung merkt.
Vieleicht hab ich da wirklich mal in einer anderen Situation auf eine 
der
Spalten geklickt.

Hätte aber nicht gedacht dass mein Problemchen zu so einer Diskussion 
führt.

Man lernt halt nie aus....

Vielen Dank erstmal an alle die mich hier unterstützt haben.

Der Fehler sitzt halt wie immer vor dem PC.

Werd jetzt mal schauen ob ich mein Projekt damit umgesetzt bekomme.

Gruß Hans

von Hans F. (hans_f83)


Angehängte Dateien:

Lesenswert?

Jaaaa...


einen Schritt weiter und wieder am Abgrund!!

Zuerst die gute Nachricht:
Der IRSDN Source läuft.
Auf dem Scope sieht das auch alles recht ordentlich aus.
Aber: Mein Radio (Kenwood BT42U)interessiert sich nicht dafür. (NEC 
Code)

1. Versuch: Signal über Remote Digitaleingang eingespeist.
--> keine Reaktion
2. Versuch mit IR Diode.
   Mein Multimedia PC macht seltsame Dinge wenn ich sende, also muss
   der Sender funktionieren.
--> Radio: keine Reaktion

Dann hab ich mir gedacht, Im Header steht ja eine Adresse, die könnte ja 
für mein Autoradio nicht passen. Es sind ja nur 255.
--> keine passt.

Und jetzt, da Tante Google auch nicht mehr hergibt gehen mir langsam die 
Ideen aus.
Was mir noch aufgefallen ist.
Auf der folgenden Seite
http://www.sbprojects.com/knowledge/ir/nec.php

steht unter Modulation:
The recommended carrier duty-cycle is 1/4 or 1/3.

Mein Scope zeigt mir aber beim Träger ein carry duty-cycle von 1/2.
Könnte dies das Problem sein und wenn ja, läßt sich das im IRSND 
einstellen?

Ansonsten fällt mir nur noch eine Lösung ein:
Original Fernbedienung bestellen und schauen was da so raus kommt.

Aber vieleicht hat ja hier jemand positive Erfahrungen mit so einer 
Steuerung.

Den Source hab ich mal angehangen.
Nicht erschecken, da ist noch viel von meinen Tests drin was nicht 
gebraucht wird



Schöne Grüße

Hans

von µC-Bastler (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Kann das daher kommen, dass das 6-er Studio den Mega8 nicht mehr
> unterstützt (fällt mir gerade ein).

Nein, kann es nicht.
Die Version 6.0.1996 bietet den ATmega8 in der Device-Liste an.

von Matthias (Gast)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Nach 5 Minuten hab ich immer noch nicht die Stelle gefunden, wo man die
> Taktfrequenz eintragen kann.

Mit Google wärst du schnelle und zum Erfolg gekommen ;-)

xfr schrieb:
> Die Option zum Eintragen der Taktfrequenz gibt es afaik nicht mehr.

Doch, eigentlich hat sich im AVR Studio 6 gegenüber Studio 4 wenig 
geändert, nur neu sortiert.

Es nach wie vor die beiden Stellen zum Einstellen der Taktfrequenz, 
einmal für den Compiler (Konstante F_CPU) und einmal für den Simulator.

Für den Compiler trägt man die F_CPU Konstante in den 
Projekteigenschaften ein, also über Menü "Project" / "...Properties" 
(Alt-F7) unter der Rubrik "AVR/GNU C Compiler" / "Symbols" einfach bei 
"Defined symbols" mit dem Button "Add Item" einen Eintrag z.B. 
"F_CPU=8000000UL" hinzufügen.

Für den Debugger kann man die Frequenz nach dem Starten auf der 
Karteikarte/Fenster "Processor" unter "Frequency" direkt eingeben

von Hans_F83 (Gast)


Lesenswert?

Matthias schrieb:
> Für den Debugger kann man die Frequenz nach dem Starten auf der
> Karteikarte/Fenster "Processor" unter "Frequency" direkt eingeben

Eigentlich logisch, hätte ich da aber auch nie vermutet

von Wolfgang (Gast)


Lesenswert?

Hans_F83 schrieb:
> Eigentlich logisch, hätte ich da aber auch nie vermutet

Und wer rechnet schon damit, das F_CPU über einen "F_CPU="-Eintrag bei 
den Defines eingegeben wird ... ;-)

von xfr (Gast)


Lesenswert?

Matthias schrieb:
> Für den Compiler trägt man die F_CPU Konstante in den
> Projekteigenschaften ein, also über Menü "Project" / "...Properties"
> (Alt-F7) unter der Rubrik "AVR/GNU C Compiler" / "Symbols" einfach bei
> "Defined symbols" mit dem Button "Add Item" einen Eintrag z.B.
> "F_CPU=8000000UL" hinzufügen.

Das ist schon klar, dass das so geht. Aber das ist ja keine eigene 
Option für die CPU-Frequenz im GUI, sondern einfach der Ort, wo man 
allgemeine Preprocessor-Defines eintragen kann.

In AVR Studio 4 gab es in den Einstellungen ein eigenes Feld für die 
CPU-Frequenz, aus der dann -DF_CPU wurde. Aus den anderen Optionen 
(welcher uC, welche Optimierung, Include-Ordner usw.) werden ja am Ende 
auch nur Parameter, die im Makefile an den Compiler gegeben werden.

von Hans F. (hans_f83)


Lesenswert?

Ich denke hier wollte man wohl was vereinfachen und hat es 
unübersichtlicher gemacht.

Aber zurück zu meinem Problem (6 Post's vorher).

Hat hier noch jemand eine Idee?
Ich habe in der Zwischenzeit versucht meine Harmony auf das Gerät zu 
programmieren. Leider unterstützt die Harmony das Gerät nicht.

Gruß Hans

von Hans F. (hans_f83)


Lesenswert?

Hat keiner mehr nen guten Tip ?

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Hans F. schrieb:

> Der IRSDN Source läuft.

Gut.

> Auf dem Scope sieht das auch alles recht ordentlich aus.
> Aber: Mein Radio (Kenwood BT42U)interessiert sich nicht dafür. (NEC
> Code)

Woher weisst Du, dass Dein Radio NEC-Code verwendet?

> Dann hab ich mir gedacht, Im Header steht ja eine Adresse, die könnte ja
> für mein Autoradio nicht passen. Es sind ja nur 255.

Nein, NEC extended verwendet 16-Bit-Adressen, damit bist Du bei 65536 
Möglichkeiten, die Du durchprobieren müsstest.

> Auf der folgenden Seite
> http://www.sbprojects.com/knowledge/ir/nec.php
> steht unter Modulation:
> The recommended carrier duty-cycle is 1/4 or 1/3.

Der Duty-Cycle spielt eigentlich keine Rolle.

> Ansonsten fällt mir nur noch eine Lösung ein:
> Original Fernbedienung bestellen und schauen was da so raus kommt.

Du hast also keine Fernbedienung für Dein Kenwood-Radio? Woher weisst Du 
dann, dass es NEC-Code ist?

Das beste Verfahren: Mit IRMP Fernbedienung auslesen und die Codes 
speichern (entweder direkt im IRSND-Code oder im EEPROM).

Beschreibe doch erstmal konkret Dein Szenario.

von Hans F. (hans_f83)


Lesenswert?

Frank M. schrieb:

Danke erstmal für die Rückmeldung

> Hans F. schrieb:
>
>> Der IRSDN Source läuft.
>
> Gut.
>
>> Auf dem Scope sieht das auch alles recht ordentlich aus.
>> Aber: Mein Radio (Kenwood BT42U)interessiert sich nicht dafür. (NEC
>> Code)
>
> Woher weisst Du, dass Dein Radio NEC-Code verwendet?
>
Diverse Quellen behaupten das Kenwood den NEC Code verwendet
z.B.
http://baggertech.com/forum/showthread.php?551-Road-Glide-Hacks&s=4214c4bf0f4c96f2548234f34b1a252f
oder
http://www.avr-praxis.de/forum/showthread.php?2581-BMW-MFL-Adapter-f%FCr-Kenwood

es gibt noch einige mehr, wobei nicht 100% klar ist um welches NEC 
Protokoll es sich handelt.
Auch hier im Forum existieren einige Threads dazu.

>
>> Dann hab ich mir gedacht, Im Header steht ja eine Adresse, die könnte ja
>> für mein Autoradio nicht passen. Es sind ja nur 255.
>
> Nein, NEC extended verwendet 16-Bit-Adressen, damit bist Du bei 65536
> Möglichkeiten, die Du durchprobieren müsstest.
>
Ja das ist richtig, der Standart NEC Code hat aber nur 256 wobei man 
0x00 und 0xFF warscheinlich weglassen kann.
Vieleicht gibt es ja eine Broadcast Adresse? Ich konnte dazu aber bisher 
nichts finden.
>
>> Auf der folgenden Seite
>> http://www.sbprojects.com/knowledge/ir/nec.php
>> steht unter Modulation:
>> The recommended carrier duty-cycle is 1/4 or 1/3.
>
> Der Duty-Cycle spielt eigentlich keine Rolle.
>
OK, damit eine Fehlerquelle weniger
>
>> Ansonsten fällt mir nur noch eine Lösung ein:
>> Original Fernbedienung bestellen und schauen was da so raus kommt.
>
> Du hast also keine Fernbedienung für Dein Kenwood-Radio? Woher weisst Du
> dann, dass es NEC-Code ist?
>
Nein bisher nicht, eine Fernbedinung im Auto macht (für mich) nicht 
wirklich Sinn.
Ich habe aber jetzt die Originale bestellt, auch wenn ich die später nie 
wieder brauchen werde.
>
> Das beste Verfahren: Mit IRMP Fernbedienung auslesen und die Codes
> speichern (entweder direkt im IRSND-Code oder im EEPROM).
>
Das werde ich machen wenn ich die Fernbedienung bekomme
>
> Beschreibe doch erstmal konkret Dein Szenario.

Eigentlich recht einfach:
Ich möchte über die Lenkrad Bedienung meines FZ ein Aftermarket Radio 
(Kenwood) steuern. Die Lenkrad FB besteht aus einem Widerstandsnetzwerk.

Somit ist das eine relativ einfache Steuerung in der der Spannungswert
von der FB in einen IR Code, oder unmoduliert über den Remote Control 
Eingang des Radios eingespeist wird.

Die Grenzen der Eingangs Spannungen leg ich mir ins EEprom.
Das ist auch schon soweit implementiert und funktioniert.
Die Werte können angelernt werden, aber das hast du warscheinlich im
Source schon gesehen.

Für die Einspeisung würde ich den Remote Eingang bevorzugen. IR ist nur
Plan B. Aus diversen Quellen ist zu entnehmen das der Remote Eingang 
hinter dem IR Decoder gseschaltet ist, somit sollte hie das Signal ohne 
Träger eingespeist werden können.

Allerdings muss ich dazu noch herausfinden ob es sich dabei um 5V oder 
3,3V Logig handelt.

So ich hoffe ich hab' nichts vergessen

LG Hans

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Hans F. schrieb:
> Ja das ist richtig, der Standart NEC Code hat aber nur 256 wobei man
> 0x00 und 0xFF warscheinlich weglassen kann.

Ich habe zu Hause zwei Media-Geräte (DVD-Player und 
Multimedia-Festplatte), welche beide die NEC-Adresse 0xFF00 benutzen ;-)

Hast Du bei Deinen Versuchen denn daran gedacht, dass beim 
Standard-NEC-Protokoll die Adresse auch aus 2 Byte besteht, wobei das 2. 
Byte invertiert ist? Dann sind es zwar nur 256 Möglichkeiten, aber Du 
musst das invertierte Byte auch setzen, also so:

00 FF     1. Adresse
01 FE     2. Adresse
02 FD     3. Adresse
...
FF 00   255. Adresse

Grund:

IRSND setzt das 2. Adressbyte nicht(!) automatisch auf den invertierten 
Wert des 1. Adressbytes, denn sonst könnte IRSND kein 
Extended-NEC-Protokoll "sprechen", wo die Invertierungsbedingung 
aufgehoben ist.

Beispiel für Deinen "Probier-Code" wäre dann:
1
uint8_t a;
2
...
3
for (a = 0; a < 255; a++)
4
{
5
    irmp_data.protocol = IRMP_NEC_PROTOCOL;
6
    irmp_data.address = (a << 8) | ~a;
7
    irmp_data.command = IRGENDWAS;    // kannst Glück haben oder auch nicht
8
    irmp_data.flags = 0;
9
10
    irsnd_send (&irmp_data, TRUE);    // senden und warten
11
}
...

Eigentlich müsste auch noch eine innere Schleife über command (0x00 bis 
0xFF) laufen, damit Du sicher sein kannst. Aber dann sinds wieder 256 x 
256 = 65536 Möglichkeiten.

> Ich habe aber jetzt die Originale bestellt, auch wenn ich die später nie
> wieder brauchen werde.

Gut so. Du könntest dann die ermittelten Werte dafür im IRMP-Artikel 
ablegen. Evtl. möchte jemand Deine Lenkrad-Lösung ja nachbauen ;-)

Gruß,

Frank

von Hans F. (hans_f83)


Lesenswert?

Frank M. schrieb:

> Ich habe zu Hause zwei Media-Geräte (DVD-Player und
> Multimedia-Festplatte), welche beide die NEC-Adresse 0xFF00 benutzen ;-)

Upps
>
> Hast Du bei Deinen Versuchen denn daran gedacht, dass beim
> Standard-NEC-Protokoll die Adresse auch aus 2 Byte besteht, wobei das 2.
> Byte invertiert ist? Dann sind es zwar nur 256 Möglichkeiten, aber Du
> musst das invertierte Byte auch setzen, also so:
>
> 00 FF     1. Adresse
> 01 FE     2. Adresse
> 02 FD     3. Adresse
> ...
> FF 00   255. Adresse

ja hatte ich auch so ähnlich gemacht

> Du könntest dann die ermittelten Werte dafür im IRMP-Artikel
> ablegen. Evtl. möchte jemand Deine Lenkrad-Lösung ja nachbauen ;-)

Wenns mal läuft, so lange wie ich jetzt schon tüftel hatte ich im Traum
nicht einkalkuliert, kann ich die Lösung gerne hier ablegen.
Ist kein Geheimnis.

Ich werde mich jetzt mal mit dem Empfänger beschäftigen.
Wenn die FB und der TSOP kommen, kann ich dann gleich loslegen.

danke nochmal
Gruß Hans

von Hans F. (hans_f83)


Lesenswert?

Kleiner Zwischenstand

Die Adresse ist gefunden (0x45BA)
Durch das Probieren hat das Radio jetzt zwar einen generellen Reset 
bekommen
(Display zeigt "DATA CLR OK"), aber das sollte nicht weiter stören.

Im Probiercode von Frank.M steckt aber ein kleiner Fehler

irmp_data.address = (a << 8) | ~a;
ergibt immer 0xFFxx

Die Invertierung muss gecasted werden!

irmp_data.address = (a << 8) | (uint8_t)~a;
oder
irmp_data.address = (a << 8) | (~a & 0xFF);

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Hans F. schrieb:

> Die Adresse ist gefunden (0x45BA)

Gratuliere. Jetzt hast Du noch 255 Kommando-Codes zum Durchprobieren. 
Hier brauchst Du nur die Werte von 0x00 bis 0xff durchzutesten. Die 
Invertierung des 4. Bytes macht IRSND selbst.

> Durch das Probieren hat das Radio jetzt zwar einen generellen Reset
> bekommen
> (Display zeigt "DATA CLR OK"), aber das sollte nicht weiter stören.

No risk no fun :-)

> Im Probiercode von Frank.M steckt aber ein kleiner Fehler

Stimmt, ich hatte den Cast vergessen. Sorry.

von Hans F. (hans_f83)


Lesenswert?

Frank M. schrieb:
> Hans F. schrieb:
>
>> Die Adresse ist gefunden (0x45BA)
>
> Gratuliere. Jetzt hast Du noch 255 Kommando-Codes zum Durchprobieren.
> Hier brauchst Du nur die Werte von 0x00 bis 0xff durchzutesten. Die
> Invertierung des 4. Bytes macht IRSND selbst.
Ich hoffe das heute endlich der IR Empfänger kommt.
Dann kann ich die Codes auslesen, die FB hab ich ja jetzt.

>
>> Durch das Probieren hat das Radio jetzt zwar einen generellen Reset
>> bekommen
>> (Display zeigt "DATA CLR OK"), aber das sollte nicht weiter stören.
>
> No risk no fun :-)
>
>> Im Probiercode von Frank.M steckt aber ein kleiner Fehler
>
> Stimmt, ich hatte den Cast vergessen. Sorry.

Bin auch erst drauf gestoßen nachdem ich die Adressen über den UART 
ausgegeben hatte.

Eine Frage habe ich aber noch.
Ich steige durch die Senderoutine noch nicht ganz durch.
Ich würde mir gerne auf einen Output das Signal ohne Träger ausgeben.
Ich denke das ich damit das Radio direkt, ohne den Umweg über IR steuern 
kann.

Gruß Hans

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Hans F. schrieb:
> Ich würde mir gerne auf einen Output das Signal ohne Träger ausgeben.

Hatte ich schon mal im IRMP-Thread der Codesammlung erklärt:

Beitrag "Re: IRMP - Infrared Multi Protocol Decoder"

Wenn Du jedoch beide Signale (moduliert und unmoduliert) haben möchtest, 
verwende den callback-Pointer, um einen weiteren Ausgang ein- und 
auszuschalten. Den Callback-Mechanismus kannst Du über irsndconfig.h 
einschalten. Der Rest ist im IRMP/IRSND-Artikel erklärt.

von Hans F. (hans_f83)


Lesenswert?

Jetzt bin ich doch etwas ratlos :((

Ich habe zur (Eigen) Kontrolle die von mir ermittelten IR Codes und
Adressen nochmal mit dem IRMP von der Fernbedienung ausgelesen.

Die ermittelten Codes/Adressen funktionieren,
die über IRMP ausgelesenen nicht.

von mir empirisch ermittelte Codes/Adressen
1
Adress 0x46
2
commands
3
0x1 LW1 /FM1
4
0x2 LW2 /FM2
5
0x3 LW2 /FM3
6
0x4 MW4 /FM4
7
0x5 MW5 /FM5
8
0x6 MW6 /FM6
9
0xa Suchlauf -
10
0xb Suchlauf +
11
0xc ? schaltet auf MW
12
0xd wechselt FM Bereiche 1-3
13
0xf numerische Eingabe
14
15
0x12 Funktions Anwahl (Direkt)
16
0x13 Funktions wechsel
17
0x14 Vol +
18
0x15 Vol -
19
0x16 ATT on / off
20
0x17 Audio Control
21
0x1C on/off
22
0x1E BT Umschaltung (Audio / USB)
23
0x92 BT Umschaltung (Audio / USB)
24
0xd8 Display Test? schaltet alle Digits im Display ein
25
0xd9 Reset


mit IRMP ausgelesene Codes
1
 * Adresse           0x9D
2
 * Taste 1           0x80
3
 * Taste 2           0x40
4
 * Taste 3           0xc0
5
 * Taste 4           0x20
6
 * Taste 5           0xa0
7
 * Taste 6           0x60
8
 * Taste 7           0xe0
9
 * Taste 8           0x10
10
 * Taste 9           0x90
11
 * Taste 0           0x00
12
 * tel               0x49
13
 * direct            0xf0
14
 * AM-               0x30
15
 * FM+               0xb0
16
 * exit              0x71
17
 * AUD               0xe8
18
 * down              0x61
19
 * up                0xe1
20
 * left              0x50
21
 * right             0xd0
22
 * ENTER/Play/Pause  0x70
23
 * ATT               0x68
24
 * Return/Repeat     0xa1
25
 * Vol-              0xa8
26
 * Vol+              0x28
27
 * Src               0xC8

Die Bezeichnungen sind zum Teil etwas unterschiedlich, liegt daran das 
ich mit den oberen begonnen habe.

Eines sollte ich noch anmerken:
Als IR Receiver habe ich statt eines 36MHz Receivers (Tsop 1836) einen 
38Mhz Receiver verwendet (Tsop 1838). (falsch bestellt)

Ich weis nicht ob dies eine Rolle spielt, da der Receiver Baustein im 
Grunde ja erstmal nur einen Tiefpass Filter darstellt, der den Träger
herausfiltert.
Das Signal was am Ausgang des Tsop herauskommt sollte von Timing
jedenfalls stimmen.
Das Nutzsignal selbst sollte sich ja nicht ändern.

Vieleicht ist mein Denkansatz hier aber auch völlig daneben, im Moment
ist das aber mein einziger Aufhänger.
Ein Muster ist hier ebenfalls nicht erkennbar.

Auffällig ist aber das zb. die Codes für die Lautstärke im oberen Fall
aufeinander folgen, im unteren Fall weit auseinander liegen, was
eigentlich darauf hindeutet, dass der Tsop die Ursache ist.

Das mittels Scope gegenzuprüfen ist fast nicht möglich, da die FB jeden
Code nur einmal sendet und als Folgecode den Repeat Code sendet.
Ohne Speicherscope... no way.

Gruß Hans

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Hans F. schrieb:
> Ein Muster ist hier ebenfalls nicht erkennbar.

Oh doch! Ich sehe zwar nicht viele übereinstimmende Tasten in Deiner 
Liste (bis auf Vol+ und Vol-), aber bei diesen beiden ist es 
offensichtlich: Die Bits sind von links nach rechts gespiegelt.

Auch das Muster der Tasten 0 bis 9 spricht dafür, denn wenn man diese 
Werte spiegelt, dann erhält man:

Taste  Code
0      0x00
1      0x01
2      0x02
3      0x03
..     ..
9      0x09

Das sieht dann für mich so aus, dass der IRMP die empfangenen Bits 
spiegelt. Hast Du irgendwas an irmpprotocols.h geändert?

Da muss drinstehen:
1
#define NEC_LSB                                 1                               // LSB...MSB

Das sorgt dafür, dass die Bits mit LSB first eingelesen werden.
Warum kommen die bei Dir "falschherum" an? Ob es da ein 
Kompatibilitätsproblem mit der PIC-Portierung gibt?

Probiere doch mal, mit IRSND die Codes 0x00 bis 0x09 zu senden. Dein 
Gerät müsste sich dann so verhalten, als ob die Tasten 0 bis 9 gedrückt 
worden wären.

EDIT:

Die Zeilen

commands
0x1 LW1 /FM1
0x2 LW2 /FM2
0x3 LW2 /FM3
0x4 MW4 /FM4
0x5 MW5 /FM5
0x6 MW6 /FM6

sprechen jedoch dagegen. Oder Dein Gerät reagiert auf verschiedene 
Adressen mit anderen Verhaltensweisen. Vielleicht ist die von Dir 
empirisch ermittelte Adresse nur eine unter vielen? Oder kann man an der 
Fernbedienung einen Modus umstellen? Meine Toshiba-Fernbedienung hat 
sowas: einen Schiebschalter für drei verschiedene Modi. Jedesmal 
wechseln die Adressen ... und auch manche Kommando-Codes.

Was ist mit der Adresse 0x46. Bekommst Du diese auch im IRMP angezeigt?

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Frank M. schrieb:
> Ob es da ein Kompatibilitätsproblem mit der PIC-Portierung gibt?

Das war Unsinn, Du hast ja einen AVR.

> commands
> 0x1 LW1 /FM1
> 0x2 LW2 /FM2
> 0x3 LW2 /FM3
> 0x4 MW4 /FM4
> 0x5 MW5 /FM5
> 0x6 MW6 /FM6

Wahrscheinlich sind das bei Dir die Tasten 0 bis 6, nur anders 
bezeichnet? Dann passt ja meine obige Vermutung, dass sämtliche Bits von 
IRMP gespiegelt sind. Oder der IRSND spiegelt nicht mehr, nämlich hier:

irsnd.c:
1
    address = bitsrevervse (irmp_data_p->address, NEC_ADDRESS_LEN);
2
    command = bitsrevervse (irmp_data_p->command, NEC_COMMAND_LEN);

Irgendwo musst Du am IRMP/IRSND gedreht haben, entweder in 
irmpprotocols.h oder irsnd.c.

von Hans F. (hans_f83)


Angehängte Dateien:

Lesenswert?

>
> Oh doch! Ich sehe zwar nicht viele übereinstimmende Tasten in Deiner
> Liste (bis auf Vol+ und Vol-), aber bei diesen beiden ist es
> offensichtlich: Die Bits sind von links nach rechts gespiegelt.

Upps, du bist genial, manchmal ist man echt blind.

> Hast Du irgendwas an irmpprotocols.h geändert?
>
> Da muss drinstehen:
>
>
1
> #define NEC_LSB                                 1
2
> // LSB...MSB
3
>

kann es sein, das es unterschiedliche Projekte zum Auslesen der Codes 
gibt?
Ich habe keine irmpprotocols.h
Hab ich vieleicht auf den falschen Code aufgesetzt?
Ich habe das Projekt nochmal angehangen.

> Probiere doch mal, mit IRSND die Codes 0x00 bis 0x09 zu senden. Dein
> Gerät müsste sich dann so verhalten, als ob die Tasten 0 bis 9 gedrückt
> worden wären.
Ja das funktioniert.
Je nach voreingestelltem Modus reagiert das Gerät anders, daher meine
unterschiedliche Interpretation.
Die Tasten 1-6 verhalten sich identisch, 7-0 warscheinlich nur für die 
Direkteingabe von Werten.

> Was ist mit der Adresse 0x46. Bekommst Du diese auch im IRMP angezeigt?
nein, IRMP zeigt mir nur Adresse 0x9D
aber: 0x9d invertiert und dann gespiegelt ergibt 0x46.

Edit:
Im Sender gibt es die irmpprotocols.h, nur im Receiver nicht
#define NEC_LSB  1                               // LSB...MSB

Vieleicht wäre ja der MSB Modus der passende.
Ich werde mal versuchen ob ich einen Code per Scope entschlüsselt 
bekomme.



Gruss Hans

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Hans F. schrieb:
> Hab ich vieleicht auf den falschen Code aufgesetzt?

Whupps, hast Du. Der von Dir verwendete IRMP-Code ist von 2010, also 
über 2 Jahre alt. Damals konnte der IRMP nur 6 Protokolle, heute sind es 
30! LSB und MSB wurden damals noch nicht berücksichtigt.

Wo hast Du das uralte Teil her? Bitte lade Dir den IRMP und IRSND hier 
herunter: IRMP

Dann sollte es reibungslos funktionieren.

EDIT:
Habe nochmal nachgeschaut: Das war Stand 01/2010, also ist das Teil 
bereits knapp 3 Jahre alt!

Würde mich echt interessieren, wo Du das her hast.

von Hans F. (hans_f83)


Lesenswert?

Frank M. schrieb:
> EDIT:
> Habe nochmal nachgeschaut: Das war Stand 01/2010, also ist das Teil
> bereits knapp 3 Jahre alt!
>
> Würde mich echt interessieren, wo Du das her hast.

Das würde es erklären.
Was alt ist, muss aber nicht schlecht sein :)
Der Code ist übrigens von
hier-"Beitrag "IRMP - Infrared Multi Protocol Decoder";

dann werde ich mal mit dem neuen testen

Gruß Hans

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Hans F. schrieb:
> Das würde es erklären.

Ja, der Steinzeit-IRMP betrachtete alle Protokolle im MSB-Format. Für 
NEC ist das falsch.

> Was alt ist, muss aber nicht schlecht sein :)

Was neuer ist, kann aber besser sein ;-)

> Der Code ist übrigens von
> 
hier-"Beitrag "IRMP - Infrared Multi Protocol Decoder";

Mist. Spätere Versionen landeten nur noch als Download im IRMP-Artikel. 
Da hast Du zu früh aufgehört mit dem Lesen des Threads ;-)

> dann werde ich mal mit dem neuen testen

Ja. Dann wirds gehen. Sicher.

von Hans F. (hans_f83)


Lesenswert?

Frank M. schrieb:
> Was neuer ist, kann aber besser sein ;-)
Guter Source muss reifen

> Ja. Dann wirds gehen. Sicher.

jetzt ist meine Welt wieder in Ordnung!
passt perfekt
vielen Dank!!!

Hans

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Hans F. schrieb:
> passt perfekt

Freut mich.

Noch als letztes ein Tipp: Stopfe vor dem Senden in irmp_data.address 
exakt den 16-Bit-Wert, den IRMP ausgibt. Diese 16-Bit-Adresse enthält 
auch den invertierten Teil. Dann brauchst Du diese Fummelei

   irmp_data.address = (a << 8) | (uint8_t)~a;

nicht zu machen.

von Hans F. (hans_f83)


Lesenswert?

Frank M. schrieb:
>
> Noch als letztes ein Tipp: Stopfe vor dem Senden in irmp_data.address
> exakt den 16-Bit-Wert, den IRMP ausgibt. Diese 16-Bit-Adresse enthält
> auch den invertierten Teil. Dann brauchst Du diese Fummelei
>
>    irmp_data.address = (a << 8) | (uint8_t)~a;
>
> nicht zu machen.

Ja ich weis, hatte ich auch in der ersten Version.
ich fand das aber so lesbarer, weil damit sofort erkennbar ist dass das
Low Byte das invertierte Adressbyte ist.

Jetzt muss ich nur mal schauen wie ich hierzu ne schöne Platine 
hinbekomme.
Ist schon ein paar Jahre her, das ich die letzte gemacht habe.
Damals wurde das Layout noch auf Folie geklebt :)

Mal schauen ob ich das mit der Bügeltechnik hinbekomme.
Sollte für die kleine Schhaltung reichen.

nochmals Danke!

Gruss Hans

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Hans F. schrieb:

> ich fand das aber so lesbarer, weil damit sofort erkennbar ist dass das
> Low Byte das invertierte Adressbyte ist.

Das stimmt aber nur bedingt, d.h. bei Deiner Anwendung. Im 
Extended-NEC-Protokoll wurde diese Beschränkung aufgehoben. Damit ist es 
dann eine echte 16-Bit-Adresse. Willst Du Deine Anwendung später auf ein 
anderes Gerät übertragen, wird es evtl. so nicht mehr funktionieren.

> Jetzt muss ich nur mal schauen wie ich hierzu ne schöne Platine
> hinbekomme.

Wie aufwändig ist denn die Schaltung? Was ist denn da außer dem µC, der 
IR-Diode, dem Transistor und dem Widerstand noch notwendig?

Eventuell reicht da ja ein Stück Lochrasterplatine.

> Ist schon ein paar Jahre her, das ich die letzte gemacht habe.
> Damals wurde das Layout noch auf Folie geklebt :)

Kenne ich, so habe ich damals auch angefangen. Ist aber schon über 25 
Jahre her.

> Sollte für die kleine Schhaltung reichen.

Zeig doch mal. Bin neugierig :-)

von Hans F. (hans_f83)


Lesenswert?

Frank M. schrieb:
> Eventuell reicht da ja ein Stück Lochrasterplatine.
Wird sicher reichen. Ich bin da aber etwas perfektionistisch.
Soll ja auch ein paar Jahre halten.

> Zeig doch mal. Bin neugierig :-)

Im Moment läufts erst noch auf den Testboard.
Kämpfe gerade noch damit mein Programm mit den aktuellen IRSND Sourcen
lauffähig zu bekommen.
Irgendwas hab ich verdaddelt, kriegs nicht durch den Compiler, es gibt
aber auch keine aussagekräftige Fehlermeldung.
Das gleiche hatte ich vorhin mit dem Receiver auch.
Da reichte es den Compiler neu zu starten.
Werds schon finden.

Danach werde ich die Schaltung in Target erstellen.
Im Moment gibts die nur in meinem Kopf.
Wenns soweit ist, stelle ich das hier mal vor.

Gruß Hans

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Hans F. schrieb:
> Irgendwas hab ich verdaddelt, kriegs nicht durch den Compiler, es gibt
> aber auch keine aussagekräftige Fehlermeldung.

Naja, irgendeine Fehlermeldung muss doch da sein. F_CPU im Projekt 
gesetzt? Target-µC im Projekt korrekt ausgewählt? IRSND_OC2 in 
irsndconfig.h eingestellt?

> Das gleiche hatte ich vorhin mit dem Receiver auch.
> Da reichte es den Compiler neu zu starten.

Merkwürdig.

> Danach werde ich die Schaltung in Target erstellen.
> Im Moment gibts die nur in meinem Kopf.
> Wenns soweit ist, stelle ich das hier mal vor.

Prima, bin gespannt.

von Hans F. (hans_f83)


Lesenswert?

Frank M. schrieb:
> Naja, irgendeine Fehlermeldung muss doch da sein. F_CPU im Projekt
> gesetzt? Target-µC im Projekt korrekt ausgewählt? IRSND_OC2 in
> irsndconfig.h eingestellt?
>

Ja gibt es
1
RunCompilerTask-Aufgabe
2
    C:\Program Files (x86)\Atmel\Atmel Studio 6.0\make\make.exe all 
3
    make: *** No rule to make target `irsnd.o', needed by `out.elf'.  Stop.
4
  Die Ausführung der RunCompilerTask-Aufgabe ist abgeschlossen -- FEHLER.
5
Die Erstellung des Ziels "CoreBuild" im Projekt "GccRadio2.cproj" ist abgeschlossen -- FEHLER.
6
Die Erstellung des Projekts "GccRadio2.cproj" ist abgeschlossen -- FEHLER.
7
8
Fehler beim Erstellen
9
========== Build: 0 erfolgreich oder aktuell, Fehler bei 1, 0 übersprungen ==========
nur weis ich nicht wo's herkommt
Das gleiche hatte ich vorhin im Receiver Source auch.
Nach Neustart des Studio ging's, jetzt leider nicht.

Ich werd' jetzt mal ein neues Projekt mit den Sourcen erstellen.

von Hans F. (hans_f83)


Lesenswert?

neues Projekt angelegt und jetzt gehts

strange....

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Hans F. schrieb:
> neues Projekt angelegt und jetzt gehts

Ja, die Fehlermeldung sah irgendwie nach kaputtem Projekt aus.

von Hans F. (hans_f83)


Lesenswert?

Frank M. schrieb:
> Hans F. schrieb:
>> Ich würde mir gerne auf einen Output das Signal ohne Träger ausgeben.
>
> Hatte ich schon mal im IRMP-Thread der Codesammlung erklärt:
>
> 
Beitrag "Re: IRMP - Infrared Multi Protocol Decoder"
>
> Wenn Du jedoch beide Signale (moduliert und unmoduliert) haben möchtest,
> verwende den callback-Pointer, um einen weiteren Ausgang ein- und
> auszuschalten. Den Callback-Mechanismus kannst Du über irsndconfig.h
> einschalten. Der Rest ist im IRMP/IRSND-Artikel erklärt.

Hallo Frank,

das funktioniert so nicht.
Wenn ich beide Signale verwenden will und den Callback Pointer nutze
wird der Callback im Takt des 36KHz Clocks aufgerufen (moduliert).
Somit bringt der das gleiche Signal wie der Port IRSND_BIT_NUMBER

Gruß Hans

von Hans F. (hans_f83)


Angehängte Dateien:

Lesenswert?

Nachtrag:

Ich habe mal ein Screenshot angehangen
oben: Signal von Callback
unten Signal von IR Output

von Hans F. (hans_f83)


Angehängte Dateien:

Lesenswert?

So es war fast geschafft.

Software ist fertig und funktioniert sehr gut.

Schaltbild und Layout waren (fast) fertig.
Bei den letzten Schönheitskorrekturen hat Target mir dann das Projekt
zerschossen und gelöscht.
Ausser einem Preview der Platine ist nichts mehr übrig.

Auf ein neues.....

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Hans F. schrieb:

> Wenn ich beide Signale verwenden will und den Callback Pointer nutze
> wird der Callback im Takt des 36KHz Clocks aufgerufen (moduliert).
> Somit bringt der das gleiche Signal wie der Port IRSND_BIT_NUMBER

Nein, das kann nicht sein. Die Modulation wird per Hardware-PWM erzeugt. 
Mittels Software über Deinen Pin in der Callback-Funktion geht das schon 
technisch nicht.

Bitte überprüfe das nochmal. Sonst zeige bitte irsndconfig.h und Deine 
Callback-Funktion.

Auf Deinem Oszi-Bild sieht man die Modulation auch gar nicht. Da sehe 
ich nur das nackte Signal. Da müsstest Du schon eine höhere 
Zeitauflösung wählen.

von Hans F. (hans_f83)


Lesenswert?

Frank M. schrieb:
> Nein, das kann nicht sein. Die Modulation wird per Hardware-PWM erzeugt.
> Mittels Software über Deinen Pin in der Callback-Funktion geht das schon
> technisch nicht.
>
> Bitte überprüfe das nochmal. Sonst zeige bitte irsndconfig.h und Deine
> Callback-Funktion.

Ich werde das bei nächster Gelegenheit noch mal prüfen und das Ergebnis 
hier posten. Zur Zeit komme ich leider nicht dazu.

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.