Archiv verlassen und diese Seite im Standarddesign anzeigen : Atmega pegel mit Interrups oder durch Pollen Analysieren?
Ich habe hier eine Ir Fernbedienung und den Empfänger (Spielzeug) . Nun will ich gerne die Signale Analysieren und sie dann mit ir leds (die am atmega angeschlossen sind ) senden.
Zum Empfangen habe ich mir ein Tsop1738 geholt.
Zum senden ir Leds.
Wie könnte ich diesen ankommenden Pegel am besten analysieren?
Da das Tsop die signale in Pegel umwandelt brauche ich ein Baustein das ein Pegel in empfänger Kompatieble singnale umwandelt. Oder könnte das der atmega ?
Die Fernbedienung arbeitet mit diesen chip ats305t und einer Ir led
peterfido
03.07.2009, 17:35
Ich habe vor kurzem eine Routine erstellt. Vorher habe ich mit einem Oszi die Anzahl der Flanken gezählt und dabei war mir aufgefallen, dass nicht nur die runtergezogenen Pegel, sondern auch der Ruhepegel unterschiedlich lang war. Wichtig ist, dass Dein Empfänger die Frequenz der Fernbedienung kann.
Mein erster "Analysecode":
$regfile = "m16def.dat"
$baud = 38400
$crystal = 16000000
Stop Watchdog
Config Watchdog = 2048
$hwstack = 32 ' default use 32 for the hardware stack
$swstack = 10 ' default use 10 for the SW stack
$framesize = 40
Config Timer2 = Timer , Prescale = 1024
Config Int0 = Change
On Int0 Isr_int0
On Timer2 Isr_tmr2
Enable Timer2
Enable Int0
Enable Interrupts
Dim Data_cnt As Byte
Dim Dataw As Long
Dim Datal(2) As Word At Dataw Overlay
Dim Datalalt As Long
Dim Datapos As Byte
Dim Pausen(32) As Integer
Dim Zeit As Integer
Config Pind.2 = Input
Config Pind.3 = Output
Config Pind.4 = Output
Pin_ir Alias Pind.2
Gnd Alias Portd.3
Vcc Alias Portd.4
Reset Gnd
Set Vcc
'Set Pin_ir
Config Portc = Output
Config Porta = Input
Led Alias Portc
Dim B As Integer , I As Integer
Dim Leds As Byte
Dim Alt As Byte
Dim Anzdaten As Byte
Dim A(512) As Byte
Dim Vari As Byte
Fertig Alias Vari.0
Merk1 Alias Vari.1
Fstop Alias Vari.2
Dim X As Integer
Dim Cnt As Byte
Print "FB Analyse Atmega 16"
Cnt = 0
I = 1
Do
If Fertig = 1 Then
Reset Fertig
For I = 1 To Anzdaten
Print Dataw.i;
Next I
Print ",";
For I = 1 To Anzdaten
Print Pausen(i);
Print ",";
Next I
Dataw = 0
Reset Fstop
End If
Incr X
If X = 30000 Then
X = 0
Toggle Led.2
End If
Loop
End
'Isr_int0:
' $asm
' sbis pind,2
' cbi portc,4
' sbic pind,2
' sbi portc,4
' $end Asm
'Return
Isr_int0:
Disable Int0
If Fstop = 0 Then
Zeit = 0
Merk1 = Not Pin_ir
Reset Fertig
Do
Incr Zeit
If Zeit = 800 Then
If Data_cnt > 22 Then
Set Fertig
Set Led.7
Set Fstop
Anzdaten = Data_cnt
End If
Data_cnt = 0
Exit Do
End If
Loop Until Pin_ir = Merk1
Toggle Led.0
If Zeit < 800 Then
Incr Data_cnt
Pausen(data_cnt) = Zeit
If Zeit < 150 Then
Dataw.data_cnt = 0
Else
Dataw.data_cnt = 1
End If
End If
End If
Enable Int0
Return
Isr_tmr2:
Datalalt = 0
Return
Edit:
Eben entdeckt, dass es ja gar nicht um Bascom geht...
Bernhard667
07.07.2009, 18:17
Hallo,
häng doch das Signal ein einen Pin, der Input Capture kann.
Dann im Interrupt die Capture Stände jetzt gegen letzen verrechnen
-> Dauer der Phase
Das gefällt mir besser als Pollen. Da hat der Controller noch Zeit übrig für andere Sachen.
Bernhard
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.