Hallo
Die IR-Led D10 ist mit der Kathode an PD1 angeschlossen. Dieser Pin ist auch der Sendepin TXD des USART. Die Anode von D10 liegt über den Vorwiderstand R16 (220R) am PB3, dies ist auch der Hardwareausgang OC2 des Timer2. Der Timer2 erzeugt die 36kHz-Trägerfrequenz des IR-Signals und gibt diese an PB3 aus (Ausgang PB3 wechselt mit 36kHz zwischen High und Low und zurück). Um dabei einen Stromfluß durch D10 zu ereichen, muss diese mit der Kathode mit GND verbunden sein. Normalerweise macht dies der USART, wenn er serielle Daten über TXD ausgibt (er moduliert dann das Trägersignal). Da bei der IR-Abstandmessung vom USART aber keine seriellen Daten abgesendet werden (das würde übrigends wohl auch funktionieren) muss das Programm diesen Pin auf Ausgang und low schalten.
Der IR-Empfänger liefert an seinem Ausgang ein invertiertes Signal, wenn er kein Trägersignal, also kein Echo, erkennt ist der Eingang PD0 gesetzt, in IR steht dann eine 1 (weil PD0 Bit 0 des Ports ist). Das IR-Echo rauscht ziemlich, deshalb werden mehrere Messungen durchgeführt. Die Ergebnisse der Mesungen stehen dann in IR, IR1, IR2... (je nachdem wie groß die Dämpfung sein soll, es ist ein Fifo). Vor jeder neuen Messung werden die alten Werte umkopiert: IR2=IR1, IR1=IR. Nur wenn alle gespeicherten Werte 0 sind, wurde sicher ein echtes Echo empfangen (0 bedeutet ja, der Empfänger hat was erkannt):
If (IR | IR1 | IR2... ) then kein Echo
Das kann man auch hier nachlesen:
https://www.roboternetz.de/phpBB2/vi...=419940#419940
Keine Ahnung, wo du das her hast und in welchem Zusammenhang das zur Abstandsmessung steht. Generell ist es aber sehr hilfreich, wenn man die Quellen auch angibt, denn ich habe echt keinen Bock jedesmal den ganzen Thread zu durchforsten um den Codefetzen zu finden, auf den sich die Frage bezieht.und wieso wird PD2 mit DDRD bezeichnet bzw PORTD?
Gruß
mic
[Edit]
https://www.roboternetz.de/phpBB2/ze...=473142#473142
Lesezeichen