Forum: Mikrocontroller und Digitale Elektronik IRSND läuft nicht (richtig)


von Newbe (Gast)


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
:(

von Newbe (Gast)


Angehängte Dateien:

Lesenswert?

Ich gebe euch hier mal das komplette AVR-Studio Projekt in der Hoffnung 
dass Irgendwer irgendeienen Fehler findet. Ich weis echt nichtmehr wo 
ich noch bei gucken soll.

von Frank M. (ukw) (Moderator) Benutzerseite


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

von Frank M. (ukw) (Moderator) Benutzerseite


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.

von Frank M. (ukw) (Moderator) Benutzerseite


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

von Manuel S. (manus93)


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

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.