PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ir remote control asuro



tortelini66
25.08.2010, 19:30
Hey Leute,
wie das topic schon sagt, suche ich ein programm um meinen asuro mit einer rc5 fernbedienung zu steuern!!
Jaja, ich weiß es gibt eine sufu, und google ist auch mein freund, aber für die ganzen tuts und so bin ich auf gutdeutschgesagt zu blöd.
Ich suche also eine fertige hex datei, mit einfacher erklärung, die ich dann nur noch zu flashen brauche:D
vielleicht hilft mir ja jemand:D

MfG tortelini66

radbruch
25.08.2010, 20:00
Hallo

Mein Weg sah mal so aus:
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=287750#287750

Die aktuelle Version der asuro-Library kann auch RC5:
https://www.roboternetz.de/phpBB2/viewtopic.php?p=275614#275614


Ich suche also eine fertige hex datei, mit einfacher erklärung, die ich dann nur noch zu flashen brauche
Normalerweise empfehle ich die aktuelle Lib nicht, weil sie meiner Meinung nach zu weit von der Hardware des asuro entfernt ist. Aber da dich ja eh nicht interessiert, wie man sowas programmiert, kannst du auch die aktuelle Version der Lib verwenden ;)

Gruß

mic

tortelini66
25.08.2010, 20:26
naja, mich interressiert das schon,
aber ich wollte derne mal was sehen ;)
probier gleich mal aus wies funzt

tortelini66
25.08.2010, 20:32
ahja, okey wenn ich den rc5 test von der lib aufspiele, dann passiert gar nix, also ich kann ihn so nich steuern!
und über den netterweise gepostetn weg von radbruch, bekomme ich folgende fehlermeldung beim compilieren:



C:\ASURO_src\FirstTry>make all
set -e; avr-gcc -MM -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=test.lst test.c \
| sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > test.d; \
[ -s test.d ] || rm -f test.d
-------- begin --------
avr-gcc --version
avr-gcc (GCC) 3.3.1
Copyright (C) 2003 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

avr-gcc -c -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=test.lst test.c -o test.o
test.c: In function `main':
test.c:37: warning: implicit declaration of function `PrintInt'
test.c:61:2: warning: no newline at end of file
avr-gcc -mmcu=atmega8 -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-ahlms=test.o test.o asuro.o --output test.elf -Wl,-Map=test.map,--cref -lm
test.o(.text+0x106): In function `main':
C:\ASURO_src\FirstTry/test.c:37: undefined reference to `PrintInt'
make: *** [test.elf] Error 1

> Process Exit Code: 2

radbruch
25.08.2010, 21:07
Hallo

PrintInt() dient hier nur zum Debuggen (=Programmfehler suchen), deshalb kann man das auskommentieren:


#include "asuro.h" // für die CD-LIB mit 72kHz-Timer

#define pow1 150 // Langsame Geschwindigkeit
#define pow2 200 // Schnelle Geschwindigkeit
#define taste (!(PINC & (1<<PC4))) // Tastenabfrage
#define keine_taste (PINC & (1<<PC4))

unsigned int count, temp; // Zaehler, IR-Kommando
unsigned char daten[14], ir_status; // IR-Datenspeicher, IR-Eingangspegel

int main(void) {

Init();
do{
temp=0;
while (PIND & (1 << PD0)) //warten auf die Flanke des Startbits
{if keine_taste StatusLED(GREEN); else StatusLED(RED); // Tastenspielerei
if taste BackLED(ON,ON); else BackLED(OFF,OFF);}
StatusLED(RED); // Alarmstufe ROT: ein Zeichen ist im Anflug

for (count=0; count<14; count++) { // im Gesamten warten wir auf 14 Bits
/*
lt. Spettel-Diagramm betraegt die Bitlaenge 1,778 ms. Bei 36 Takten pro Millisekunde ergibt das 36*1,778 = 64
*/
Sleep(96); // Information einlesen nach 3/4 der Bitlaenge (96 bei CD-LIB!)
ir_status=(PIND & (1 << PD0)); // Pegel Speichern
if (ir_status) daten[count]='1'; else daten[count]='0'; // und merken
if (ir_status) temp |= (1 << (13-count)); // das MSB(=mostsuefikantbit) zuerst
while (ir_status == (PIND & (1 << PD0))); // Bit gelesen, warten auf naechste Flanke
}
temp=temp/2 & 0xf; // Die Info steht in den Bits 1-4
StatusLED(YELLOW); // Daten gelesen
/*
Msleep(2000); // Zeit um den IR-Transceiver ueber den asuro zu bringen
SerWrite("\n\r",2);
SerWrite(daten,14); // Bitmuster zum PC senden
SerWrite("-",1);
PrintInt(temp); // erkannte Daten zum PC senden
*/
/* asuro steuern.
Mit dem 10er-Block der Fernbedienung kann der asuro nun gesteuert werden:
Alle anderen Tasten stoppen den asuro
*/

switch (temp) {
case 1: MotorDir(FWD,FWD); MotorSpeed(pow1,pow2); break;
case 2: MotorDir(FWD,FWD); MotorSpeed(pow2,pow2); break;
case 3: MotorDir(FWD,FWD); MotorSpeed(pow2,pow1); break;
case 4: MotorDir(BREAK,FWD); MotorSpeed(0,pow1); break;
case 5: MotorDir(BREAK,BREAK); MotorSpeed(0,0); break;
case 6: MotorDir(FWD,BREAK); MotorSpeed(pow1,0); break;
case 7: MotorDir(RWD,BREAK); MotorSpeed(pow1,0); break;
case 8: MotorDir(RWD,RWD); MotorSpeed(pow1,pow1); break;
case 9: MotorDir(BREAK,RWD); MotorSpeed(0,pow1); break;
default: MotorDir(BREAK,BREAK); MotorSpeed(0,0); break;
}
StatusLED(GREEN); //endlos
//Msleep(1000);

}while (1);
return 0;
}(ungetestet)

Ich hoffe, dass funzt so. Die orginale CD-Lib läuft mit einem anderen Timertakt für Sleep(). Deshalb sollte das verzögerte Auswerten des Eingangs nach Sleep(96) erfolgen.



naja, mich interressiert das schon,
aber ich wollte gerne mal was sehenDann versuche doch mal etwas einfacheres. Eine Led einschalten oder blicken lassen, "Hallo Welt"...

Gruß

mic

oliver_hause
25.08.2010, 22:05
Cool das erste RC5 prog das bei mir funzt.
Jetzt brauch ich nicht mehr meinen PC dem ASURO hinterher zu Tragen.
Mein Kater findet das auch Cool.
Wenn Ich den Code ansehe bleibe ich auch lieber beim Led einschalten.
gibt es eigentlich nur <<<###>>>'"";:{[]}()==++-- oder auch Befehle
die etwas aussagen.***GGG

radbruch
25.08.2010, 22:53
Hallo

Schön, dass es auf Anhieb funktioniert :)

Wie alle Programmiersprachen hat auch C eine Syntax (http://de.wikipedia.org/wiki/Syntax). Die sollte man kennen, wenn man ein Programm schreiben möchte:

http://openbook.galileocomputing.de/c_von_a_bis_z/
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial

Das sollte man zumindest mal überflogen haben. Leider ist das so :(

Eine Abkürzung zum Erfolg ist vielleicht das hier:
easy-asuro (http://arexx.com/arexx.php?cmd=goto&cparam=p_asuro_rovipro.dat)
(Henk sucht vermutlich noch Tester!)

Eine RC5-Funktion als Hex-Datei bietet Henk auf seiner asuro-Seite:
http://home.kpn.nl/winko001/Asuro/Software/AsuSfwPagFrm.htm


Gruß

mic

tortelini66
26.08.2010, 14:14
ok funktioniert ganz gut,
aber welche taste muss ich drücken um was zu tun ?????

radbruch
26.08.2010, 14:31
In der Datei Asuro013.c ist die Zuordnung der Tasten zu den asuro-Funktionen definiert:


#include "asuro.h"
#include "hvwdefines.h"

//remote control key codes
#define REMOTE_KEY_STD_BY 12
#define REMOTE_KEY_VOL_UP 16
#define REMOTE_KEY_VOL_DW 17
#define REMOTE_KEY_PRG_UP 32
#define REMOTE_KEY_PRG_DW 33
#define REMOTE_KEY_0 0

#define ASURO_FORWARD REMOTE_KEY_PRG_UP
#define ASURO_REVERSE REMOTE_KEY_PRG_DW
#define ASURO_TURN_LEFT REMOTE_KEY_VOL_UP
#define ASURO_TURN_RIGHT REMOTE_KEY_VOL_DW
#define ASURO_STOP REMOTE_KEY_0(Warum hier die asurolib und die hvwdefines (http://www.arexx.com/forum/viewtopic.php?p=1323#p1323) eingebunden sind ist mir auch nicht ganz klar :)

Vorwärts, rückwärts, links, rechts und stop sind die Tasten Programm+, Programm-, Lautstärke+, Lautstärke- und die Zifferntaste "0" auf der Fernbedienung. Ob das wirklich so funktioniert weiß ich aber auch nicht, weil ich das nie getestet habe. Meine eigene Lösung reichte mir völlig ;)

Gruß

mic