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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.