PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RC5 Sender und Empfänger am ATMega32 wie bekommt man beides?



Steffen44
16.06.2007, 14:59
Hallo Community,


was ich machen möchte :

IR Sender und Empfänger (Tsop u. SFH485) an einem µController betreiben. Sender und Empfänger wurden von mir an zwei unterschiedliche Ports angeschlossen.


Das Problem :

Im Bascom überschneiden sich irgendwie die Definitionen für die Ports. Sprich CONFIG RC5 = PIND.5 kann ich nur einmal definieren somit habe ich entweder den Sender oder wenn ich einen anderen Port definiere den Empfänger.


Die Frage :

Gibt es eine Definition die es mir erlaubt IR - RC5 Sender und Empfänger an zwei Ports gleichzeitig zu betreiben ?


Viele Grüße
Steffen

linux_80
16.06.2007, 15:22
Hallo,

wenn ich das recht verstehe, soll mit einer IR-LED etwas in RC5 versendet werden.
Laut Bascom-Hilfe geht das per Timer1 über den OC1A Ausgang, man muss nicht direkt einen Port definieren für den Sender, nur RC5send aufrufen mit den gewünschten Werten.
Der AVR sollte nur einen OC1A haben, was beim M32 zutrifft.

Nur beim Empfang muss der Pin definiert werden, deshalb gibts keine Überschneidung beim senden/empfangen,
ausser, das evtl. der Empfänger während dem senden deaktiviert wird, damit der eingene Code nicht erkannt wird.

Steffen44
16.06.2007, 15:49
ahh ^^ stimmt das mit dem OC1A habe ich überhaupt nicht beachtet weil ich davon ausgegangen bin immer die Ports definieren zu müßen.

Da es mit den Ports offensichtlich nicht geht ist das wohl die einzigste Lösung beides zu betreiben.

Das werde ich gleich mal umlöten und das Ergebniss posten.

Danke für den Tip linux_80

Steffen44
16.06.2007, 17:53
ok das scheint zu klappen.

Das was noch nicht klappt ist das mein Empfänger den eigenen gesendeten Code erkennt. Da blicke ich noch nicht ganz durch.

Command1 = 1 ' power on off
Togbit1 = 0 ' make it 0 or 32 to set the toggle bit
Address1 = 0

Rc5send Togbit1 , Address1 , Command1

Command bedeutet dann wohl mein zu sendendes Signal. Mit Adress kann ich nicht viel Anfangen aber vermutlich kann ich mit einer anderen Adresse noch mehr schicken als wie nur die 64 Zeichen laut der Hilfe.

Stimmt die Einstellung so das er mir eine RC5 Konforme "1" schickt ?


Gruß
Steffen

Steffen44
16.06.2007, 18:47
so jetzt bin ich mal zu meinem Fernsehr gegangen der das gute alte RC5 Protokoll hat.

Das einprogrammierte ausschalten funktioniert auf anhieb soweit sogut.

Warum aber der µC den eigenen ausgesendeten Code nicht wiedererkennt versteh ich trotzdem noch noch nicht. Immerhin muß man sich so keine Verriegelung einbauen aber irgendeinen Grund muß es ja geben.

for_ro
16.06.2007, 19:39
Funktioniert der Empfänger denn, wenn du mit einer externen FB sendest?

Ich kann mir ehrlich gesagt nicht vorstellen, dass du mit dem gleichen µC senden und parallel empfangen kannst. Wenn das RC5send sendet, kann er doch nicht gleichzeitig GetRC5 ausführen. Und sogar wenn du beide Routinen selber programmieren würdest glaube ich nicht, dass das klappen könnte.
Aber ich denke, dass du den eigenen Code wohl auch gar nicht empfangen willst, oder? Höchstens zum Testen.

Steffen44
16.06.2007, 19:48
Ja der Empfang mit der FB funktioniert auch.

Und ja es sollte nur zum testen sein. Aber vermutlich hast du du recht, dass es der Programmablauf des µC gar nicht gestattet den gesendeten Code zur gleichen Zeit auch wieder zu empfangen. Vermutlich geht das nur mit irgendeiner Multitasking Operation ^^


Was ich mich schon lange Frage ist was die mit der Sperrspannung der Infrarotdiode meinen ? Ist die Sperrspannung gleich der Betriebsspannung ?

Ich möchte mir noch eine eigene IR Fernbedienung bauen und habe aber nur 3 Volt zur Verfügung das reicht für den ATmega8 als 2,8 Volt Variante aber reicht das auch für die LED wenn sie im Datenblatt als 5 Volt Sperrspannung angegeben ist ?


Gruß
Steffen

robbifan
16.06.2007, 19:57
von einem avr kann der gesendete code nicht von sich selber empfangen werden. multitasting macht der avr32 nicht.

robbifan
16.06.2007, 20:02
wenn du asm coden kannst, kannste jeden pin am avr als sender oder empfänger nehmen. der bascombefehlssatz ist dafür zu unflexiebel.

for_ro
16.06.2007, 20:10
Pins kannste auch in Bascom nehmen wie du willst. Schlimmer finde ich, dass der Befehl so lange dauert und den µC während der ganzen Zeit blockiert. Ausserdem wird ein Timer verschwendet.
Senden brauche ich nicht, aber zum Empfangen habe ich mir eine eigene Routine gemacht. Dabei liegt das Signal an einem externen Interrupt Eingang und ein durchlaufender Timer wird zum Zählen benutzt. Dadurch braucht es praktisch keine Zeit zum Einlesen.

robbifan
16.06.2007, 20:17
....Pins kannste auch in Bascom nehmen wie du willst.....
aber nicht mit den bascombefehlen zum senden.

OC1(A) hast du nur einen zum senden....in bascom.

wenn du asm kannst , dann brauchst du den oc1 nicht, das senden machste dann so aus dem handgelenk.

robbifan
16.06.2007, 20:20
....Dadurch braucht es praktisch keine Zeit zum Einlesen.........


dat stimmet nicht, der avr32 machet keine multitasting.

for_ro
16.06.2007, 20:41
Ich sagte "praktisch".
Im Verhältnis zu 150ms dauern 2-3 Abfragen und ein paar Shifts und Incr pro bit "praktisch" keine Zeit. Für alle 14 bits bestimmt nicht 1ms.

Du bist nur festgelegt, wenn du die Standard Routine RC5send nimmst. Anstatt gleich in ASM kannst du natürlich auch in Bascom über jeden PIN senden, wenn du es selber machst. Und so zeitkritisch sind die 1,7ms Taktzeit beim RC5 nicht, dass ein Compiler da versagen würde.

robbifan
16.06.2007, 20:56
kannst du natürlich auch in Bascom über jeden PIN senden,


nein.
schau dir mal die zeitdurchläufe der bascombefehle an, kannste überall nachlesen, oder machst selber den test in avrstudio, ist ganz interessant, was bascom dafür braucht.

ohne einen timer schafftst du das rc5 senden mit den bascombefehlen nicht, weil die zu langsam sind. nur das fastavrbasic schafft den rc5-sender nur mit dem basiccode ohne timer und ohne eingebundene asm-sourcen.



dass ein Compiler da versagen würde.


der compiler versagt nicht, das compilat versagt und du bekommst nur falsche ergebnisse am empfänger.

for_ro
16.06.2007, 21:13
Ich frage mich, wie du ohne Timer den Zeitablauf machen willst? Das geht wohl nie. Aber der kann ja durchlaufen, ist also nicht für die eine Aufgabe reserviert.
Und das Bascom zu langsam wäre, halte ich für ein Gerücht. Ich hab ein 132x132 Farbdisplay dran, welches nur mit Bascom Befehlen angesteuert wird und das ist um Längen mehr an Daten als ne simple RC5 Übertragung. Und nebenbei wird auch noch ein S/W GLCD angesteuert, mehrere Temp-sensoren eingelesen, Daten auf ner MMC abgespeichert und und und.
Aber lass uns nicht streiten, Hauptsache Steffens Problem ist klar.

Steffen44
16.06.2007, 21:22
japp Problem gelößt.

Das läßt mir nun die Zeit um mich mit einem neuem Projekt zu beschäftigen. Der AVR Webserver hat es mir übelst angetan sowas geiles muß man haben ^^


Gruß
Steffen

robbifan
16.06.2007, 21:34
ich habe an meinem robby auch dran:
- 5 ir-sharp
- 1 kompassmodul
- 2servos
- 2 ultrschall srf04
- 1 mmc-karte 512mb
- 1 gameboycam
- 1 funkcam
- 1 eeprom 32kbyte
- 2 radencoder
- 1 funk rs232
- 1 motorcontroller
- 1 rc5send
- 1 rc5empfang
-1 palm m105

schafft der bascom und der avr32 allemal, ist nur eine frage der abrufung.

robbifan
16.06.2007, 21:40
.....Und das Bascom zu langsam wäre, halte ich für ein Gerücht....


bascom ist nicht zu langsam, es macht halt manchmal nur im compilat seltsame resourcenverschwendungen, die ich als asm-progger nicht machen würde aus zeitgründen und von der ansatzweise her.

Steffen44
02.07.2007, 15:01
da ich nun schon so oft höre probiere mal ASM oder einfach das man im ASM einfach viel besser Prüfen kann was der µC macht, brauche ich mal ne Info darüber wo ich ASM herbekomme und wie das eigentlich funktioniert mit dem ASM.

So ein Link zu einem Tutorial oder ne kleine Anleitung wäre schön.

Gruß
Steffen

robbifan
02.07.2007, 15:12
lade dir das avrstudio runter und instaliere das.

da kann man schön üben in asm und den code nachvollziehen. der ganze avr wird simuliert. sogar die laufzeiten werden 100% ausgegeben für ein befehl, nicht zu verwechseln mit der simulationszeit auf dem pc.

dort findest du auch den originalen assembler vom atmega und die dazugehörigen inc. kannst auch für den assembelr eien dos-bat schreiben und dann compilieren, brauchst nicht das avrstudio laufen zu lassen.

Steffen44
02.07.2007, 17:14
Bis jetzt habe ich immer noch nicht wirklich rausgefunden warum ASM = Assemblersprache so allgemein verwendet wird.

Wenn von ASM die Rede ist habe ich doch immer noch nicht die Information welcher Compiler bzw. Assembler sich dahinter verbirgt oder gibt es keine weiteren alternativen als wie das AVR Studio ?

Gruß
Steffen

robbifan
02.07.2007, 19:15
der assembler der im avrstudio mitgeliefert wird ist der originale. den gibt es umsonst. es gibt auch noch andere assembler für den atmega, die freeware sind mit sogenannten pseudobefehlsergänzungen usw.

es gibt nichts vergleichbares besseres als freeware wie das simulations-avr-studio.

du kannst auch mit winavr-c proggen, kommt an die kompackheit von asm ran und auch fast an die v0.

Steffen44
03.07.2007, 08:27
super danke dann werde ich mir mal das avrstudio zu gemüte führen.


Gruß
Steffen