IRSND läuft nicht (richtig)

Gast #2804326
Lesenswert?

Ich versuche jetzt schon länger IRSND auf einem ATmega8 zum laufen zu
bringen (auch mit einem atmega32 probiert, geht auch nicht).

Ich habe das Programm von oben (main und irsndconfig) mit copy & paste
auf dem AVR. IR-Diode ist wie in dem Wiki von IRSND gezeigt
angeschlossen (Basis an PB3).

Der Controller "lebt" auch: Wenn ich die IR-Diode durch eine 0815 LED
ersetze Blinkt diese.

Des weiteren habe ich einen ATmega32 auf einem Pollin-Board der bei
einem empfangenem IR-Befehl das Protokoll, Adresse und Command auf dem
LCD anzeigt. Hier kommt rein garnichts an... Wenn ich mit einer Normalen
TV Fernbedienung und dem Mega8 gleichzeitig sende wird das empfangene
Protokoll jedoch verfälscht (lässt wohl vermuten dass zumindest
IRGENDWAS mit IRSND endsteht, und wenn es nur Bullshit ist ;) )

Fueses:
hfuse: D9
lfuse: E4
(Arbeite mit Burn-O-Mat)

Grüße
Manu

Hoffe dass Ihr mir helfen könnt, da mein "Projekt" jetzt erstmal stockt
:(
Moderator Persönliche Seite #2810818
Lesenswert?

Newbe schrieb:
> Der Controller "lebt" auch: Wenn ich die IR-Diode durch eine 0815 LED
> ersetze Blinkt diese.

Schau mal, ob die IR-LED auch blinkt: einfach diese mit einer 
Digitalkamera oder Handykamera beobachten. Hier wird das IR-Licht 
sichtbar.

> Des weiteren habe ich einen ATmega32 auf einem Pollin-Board der bei
> einem empfangenem IR-Befehl das Protokoll, Adresse und Command auf dem
> LCD anzeigt. Hier kommt rein garnichts an...

Die Signale einer normalen FB (alleine) aber schon, oder?

> Wenn ich mit einer Normalen
> TV Fernbedienung und dem Mega8 gleichzeitig sende wird das empfangene
> Protokoll jedoch verfälscht (lässt wohl vermuten dass zumindest
> IRGENDWAS mit IRSND endsteht, und wenn es nur Bullshit ist ;) )

Es sieht soweit alles korrekt aus. Du könntest natürlich mal den 
IRSND-Ausgang direkt mit dem IRMP-Eingang Deines anderen µC koppeln und 
dann im IRMP die Logging-Funktion einschalten.

In irsnd.c müsstest Du aber dann die Modulation abschalten. Dazu ersetzt 
Du die beiden Funktionen irsnd_on() und irsnd_off() durch folgendes:
1
static void
2
irsnd_on (void)
3
{
4
    if (! irsnd_is_on)
5
    {
6
        IRSND_PORT &= ~(1 << IRSND_BIT);
7
        irsnd_is_on = TRUE;
8
    }
9
}
10

11
static void
12
irsnd_off (void)
13
{
14
    if (irsnd_is_on)
15
    {
16
        IRSND_PORT |= (1 << IRSND_BIT);
17
        irsnd_is_on = FALSE;
18
    }
19
}

Gruß,

Frank
Moderator Persönliche Seite #2810840
Lesenswert?

Nachtrag:

Was steht in Deinem Projekt für F_CPU?

Ich habe in Deinem Main-Modul folgendes gefunden:

#ifndef F_CPU
#define  F_CPU 8000000UL
#endif

So etwas ist suboptimal. Entweder gibt man F_CPU in der Projekt-IDE vor 
oder im Quelltext. Aber niemals bedingt im Quelltext, sonst wird u.U. 
das eine Modul mit F_CPU = x und das andere mit F_CPU = y übersetzt.

Damit hebelst Du den Sicherheitsmechanismus

#ifndef F_CPU
#  error F_CPU unkown
#endif

aus.

In irsnd.c wird nämlich auch auf F_CPU zugegriffen - für die 
Modulationsfrequenz. Da hast Du aber nichts gesetzt.

Nimm das define von F_CPU bitte raus aus Deinem main-Modul und setze es 
global in die Optionen Deiner IDE.
Moderator Persönliche Seite #2810946
Lesenswert?

Ich habe mal Dein Projekt in AVR Studio 5.1 geladen.

Erwartungsgemäß kommt beim Übersetzen die Warnung:

c:\program files\atmel\avr studio 
5.1\extensions\atmel\avrgcc\3.3.1.27\avrtoolchain\bin\../lib/gcc/avr/4.5 
.1/../../../../avr/include/util/delay.h(89,3):  #warning "F_CPU not 
defined for <util/delay.h>"

Ich habe dann mal in delay.h nachgeschaut:

#ifndef F_CPU
/* prevent compiler error by supplying a default */
# warning "F_CPU not defined for <util/delay.h>"
# define F_CPU 1000000UL
#endif

Aua, dieses Ding setzt dann F_CPU auf 1MHz. Das passt natürlich nicht.

Also bitte:

Entweder F_CPU am Anfang(!) von irsnd.c auf 8000000UL setzen oder global 
im Projekt.

Ausserdem solltest Du Dein Projekt besser auf "Release" umstellen, damit 
dann auch mit der Optimierung -Os übersetzt wird.

Gruß,

Frank
#2812972
Lesenswert?

Ich WUSSTE dassich irgendwo sonen überflüssigen Fehler gemacht haben 
(deshalb der Upload des kompletten Projekts)

Scheint jetzt einwandfrei zu funktionieren.
Falls jemand auch mal mit solch einem Fehler zu kämpfen hat:
Unter Projekt -> "Projektname" Properties... -> Toolchain -> Symbols in 
der Tabelle "Defined Symbols" "F_CPU=8000000UL" einfügen.

Vielen dank Frank. Dein IRMP und IRSND sind wirklich mega fein mit ihrer 
Vielseitigkeit ;)

Grüße
Manu

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren