-         

Ergebnis 1 bis 8 von 8

Thema: IR LED takten

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    03.07.2007
    Beiträge
    349

    IR LED takten

    Anzeige

    Hallo!

    Wenn ich die IR LED anschalte mittels PORTB |= (1<<PB3); , ist dann die LED bereits mit 36kHz getaktet?

    Wenn nein: Wenn ich die LED mittels der Funktion Sleep(1) in einer Schleife das eine mal einschalte und das andere mal ausschalte, so erhalte ich doch eigentlich nur eine Frequenz von 18kHz!?

    Grüße,
    Harri
    Grüße,
    Harri

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    03.07.2007
    Beiträge
    349
    Code:
    	DDRD |=  (1<<PD1);
    	DDRB |=  (1<<PB3);
    	PORTD &= ~(1<<PD1);
    
    	while(1)
    	{
    		if((Gettime()%1000)>500)
    		{
    			PORTB |= (1<<PB3);
    			StatusLED(GREEN);
    		}
    		else
    		{
    			PORTB &= ~(1<<PB3);
    			StatusLED(RED);
    		}
    	}
    Und warum funktioniert dieser Code nicht? Die Statusled blinkt brav im vorgegebenen Rythmus, während die IR LED einfach die ganze Zeit leuchtet.
    Grüße,
    Harri

  3. #3
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Hallo

    Der PB3 ist gleichzeitig auch der OC2, das bedeutet, du kannst ihn mit einem Timer ansteuern. Die serWrite()-Funktion macht das übrigens auch so. Auf der einen Seite (OC2) wird mit 72kHz umgeschaltet während der UART über TXD die Kathode der IR-LED im Rythmus der seriellen Daten gegen GND schaltet. So werden die Daten mit 36kHz moduliert.

    Die Abstandsmessung von Waste funktioniert auch so ähnlich. Allerdings steuert er noch zusätzlich die Helligkeit der IR-LED per PWM (glaube ich wenigstens).

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    05.07.2007
    Beiträge
    44
    Hallo harry3

    Der Timer 2 wird beim ASURO im CTC - Mode
    ( Clearte Timer on Compare Match ) betrieben. WGM21 = 1
    Auserdem ist kein Prescaler eingeschaltet. CS20 = 1
    Der Systemtakt von 8 Mhz liegt also am Timer an.
    Das OCR2 Register wird mit 110 geladen.
    Der Timer Zählt also von 0 bis 110 und schaltet dann den Ausgang um.
    Von low nach high und umgekehrt. Der Counter beginnt wieder von
    Null an zu Zählen. Der Systemtakt wird damit durch 110 geteilt, das egibt
    annähernd die 72 kHz.
    Für eine Phase sind zwei Halbwellen erforderlich, also 72 kHz / 2 = 36 kHz.
    Für eine Frquenz von 18 kHz brauchst dur nur das OCR2 Register mit
    220 laden.

    Mfg
    A.Hoffmann

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    03.07.2007
    Beiträge
    349
    Achso, jetzt geht mir schön langsam ein (infrarotes*g*)Licht auf:
    Ich habe ja die Anode der IR LED ein/ausgeschaltet und die Kathode dauerhaft auf Masse gelegt. Das hat nicht funktioniert.
    Nun schalte ich die IR LED mittels PD1 auf Masse oder auf +5V => somit kann ich die LED steuern.
    Der Timer legt also IMMER an die LED den 36kHz Takt an, egal ob ich versuche, diesen PIN manuell zu verstellen(also dauerhaft auf HIGH/LOW) oder nicht.

    Kennt jemand von Euch gute Tutorials zu dem Thema AVR? Das schwierige ist ja zu wissen, welches Register für was da sind. Sobald man das mal weiß ist es eh recht einfach.

    Somit funktioniert nun mein RC5-Asuro: Ich kann einerseits RC5 Signale empfangen, andererseits nun aber auch welche versenden und Asuro somit als Fernsteuerung vewenden*g*
    Grüße,
    Harri

  6. #6
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Genau, jetzt hast du's.

    Das schwierige ist ja zu wissen, welches Register für was da sind.
    Das kommt von alleine je mehr man sich damit beschäftigt.

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    03.07.2007
    Beiträge
    349
    Zitat Zitat von radbruch
    Das kommt von alleine je mehr man sich damit beschäftigt.
    Es wird ja wirklich von Tag zu Tag verständlicher(vor allem jetzt mit AVR Studio wo man sich die ganzen Register bildlich anschauen kann).
    Am Anfang hab ich außer Bahnhof bei den kryptischen Ausdrücken ja garnix verstanden. Ich hab mir außerdem Asuro Band 1 bestellt, da wird ja hoffentlich auch ein bisschen was in die Richtung erklärt. Das Buch werd ich mir dann nächstes WE bei einer längeren Zufahrt "reinziehen".
    Grüße,
    Harri

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    05.07.2007
    Beiträge
    44
    Hallo harry3.

    Eine Beschreibung der Register und wie man sie Verwendet, findest
    du auf der Home Page von atmel.com.
    Gib als Suchbegriff doc2486 ein.
    Da wird nicht nur die Funktion der Register beschrieben, sondern
    auch die Programierung in C und Assembler erklärt.

    MfG
    A. Hoffmann

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •