Hjälp med fjärrstyrning

Robot, CNC, Pneumatik, Hydraulik, mm
Ackee
Inlägg: 6
Blev medlem: 6 april 2005, 12:47:38

Hjälp med fjärrstyrning

Inlägg av Ackee »

Tänkte fjärrstyra min robot och har lägligt kommigt över en sändare och en reciever ifrån easy-radio:
http://www.lprs.co.uk/pdf_directory/238 ... -guide.pdf

Problemet är att jag är osäker hur jag ska få dem att fungera har skrivit följande lilla enkla program bara för att testa men som sagt, det funkar ej så jag antar att jag missat något viktigt :) ny inom radio, första fösöket men nåjå, här är koden skriven i CCS kompilator:

TRANSMITTER:
//////////////
#include <18F452.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=12000000)
#use rs232(baud=19200, xmit=PIN_C6, rcv=PIN_C7) // Jumpers: 8 to 11, 7 to 12



void main (){
output_b(0x00); //
set_tris_b(0x01); // RB0 = input, resten output

while (1){
if(input(PIN_B0) == 1){
printf("1");
output_high(PIN_B1);
}
printf("2");
}
}

////////

RECIEVER:
//////////

#include <18F452.h>
#include <motor.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=12000000)
#use rs232(baud=19200, xmit=PIN_C6, rcv=PIN_C7) // Jumpers: 8 to 11, 7 to 12
#define diod1 PIN_B1
#define diod2 PIN_B2
#define diod3 PIN_B3
#define diod4 PIN_B4
#define diod5 PIN_B5
long k=0;
char radioinput=666;

void go(){
output_high(diod5);
delay_ms(10);
output_low(diod5);
delay_ms(10);
radioinput=getc();
k++;
printf("\rRadio input: %u varv: %lu",radioinput,k);
}
void init(){
disable_interrupts(global);
printf("\n\rSTARTING\n");
output_b(0x00); //
set_tris_b(0x00); // RB0 = input, resten output
}
void main (){
init();
delay_ms(100);
while(1){
go();
}
}
/////////////

Har ett rs232 interface mellan reciever PIC och min dator för att kunna följa programmet via hyperterminalen men den hänger sig vid getch() iom att den inte får någon insignal oavsett om jag trycker in switchen (RB0) vid transmittern.

Någon som har tips/idè? :shock:
cyr
Inlägg: 2712
Blev medlem: 27 maj 2003, 16:02:39
Ort: linköping
Kontakt:

Inlägg av cyr »

Har du testat varje del för sig?

Sändare kopplad till serieport på datorn istället för radio.
Sändare kopplad direkt till mottagare, utan radio.

t.ex...
Användarvisningsbild
Icecap
Inlägg: 26630
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Jag har just använd Easy Radio-moduler och de fungerar kanon.

Som standart är de ställd till 19K2,n,8,1 och det är bara att skicka en seriell ström till dom (max. 180 bytes) och sedan vänta minst 2 seriella bytes tid, då kommer sändaren att sända över den block.

Mottagaren skickar därefter ut de data som ett antal seriella bytes.

Plätt-lätt.

Det finns en mjukvara som man kan ställa in olika parametra med, det kräver en MAX232 (typ) och en serieport på datorn, sen är det klart, det är bara att välja hur det ska ställas in.

Jag fick det upp och köra på 10 min.
Ackee
Inlägg: 6
Blev medlem: 6 april 2005, 12:47:38

Inlägg av Ackee »

icecap har du någon liten exempel kod på hur det såg ut när du skickade, är osäker på om det fungerar att bara langa ut det med printf och ta emot med getch nämligen :S
Användarvisningsbild
Icecap
Inlägg: 26630
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Jag skickade vid att först samla ihop i en buffer i minne med 'sprintf' på grund av min utskriftrutin är en interruptbaserat gör-det-själv så jag kan inte använda 'printf', sen skickade jag det rakt av.

I mitt fall består blocken av:
<STX >"0123"<0xFF><ETX> t.ex.

Du kan fint använda 'printf' om inte den är för långsam (2 char delay = sänd blocken), jag har som sagt inte den möjlighet på grund av mitt upplägg.
Ackee
Inlägg: 6
Blev medlem: 6 april 2005, 12:47:38

Inlägg av Ackee »

tanken är att jag ska styra roboten via fyra knappar, håller jag in frammåt ska ska den bara mata något i stil med printf("forward"); eller printf("1");, sedan har jag kopplat data out direkt ifrån radio mottagaren till min mottagar pic, sedan tänkte jag kollar rs232 porten (RC7) om jag får in forward, left etc får jag inte det ska den bara stå stilla. Iom att jag använder printf etc så är jag osäker om jag måste ha ett rs232 (MAX232) interface mellan radio mottagaren och min pic. Ska prova mer idag, roboten ska vara klar på tors...deadline och det är jag som släpar efter med detta :) :( blir KAFFE rätt in i venerna eller nå :D
Ackee
Inlägg: 6
Blev medlem: 6 april 2005, 12:47:38

Inlägg av Ackee »

enn till fråga, då radion skickar med 19200 baud som default så antar jag att det är lämpligast att min printf och getch också arbetar på 19200 baud, det borde inte vara några problem när det kommer till PIC:ens begränsningar antar jag. Men kan jag ta emot i 19200 men skicka till hyperterminalen i 9600? Nybörjar frågor ;)
Användarvisningsbild
Icecap
Inlägg: 26630
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Ja, men då måste du ställa om baudrate mellan mottagning från radio och sändning till hyperterminal. Men varför inte köra 19K2 på HT?
Ackee
Inlägg: 6
Blev medlem: 6 april 2005, 12:47:38

Inlägg av Ackee »

Självklart är det lättast :D satte den till 19200 och det fungerade bra.

Nu så reagerar dock inte getch på att snappa upp vad som komma till data out. Vet inte om det beror på att inget kommer där eller pga att getch inte vill fungera :(

På sändaren har jag kopplat:

PIN 1 (RF GND) - GND
PIN 2 (RF OUT) - Antenn (en enkelledare 16.4cm lång, med isolering på)
PIN 3 (Vcc) - +5V
PIN 4 (Gnd) - GND
PIN 5 (TXD) - RC6/TX på piccen (18f452)

På mottagaren:

PIN 1 (Antenna) - Antenn (likadan som sändaren)
PIN 2 (RF Gnd) - GND
PIN 3 (RSSI) - Inget
PIN 4 (Busy output) -GND
PIN 5 (Serial data out) - RC7/RX på pic
PIN 6 (Serial data in) - +5v
PIN 7 (Host ready input) - GND
PIN 8 (Vcc) - +5v
PIN 9 (Ground) - GND


Sändarens kod är följande:

while (1){

printf("\n Sending...");
}

kopplar jag RC6 på sändar piccen till MAX232 och hyperterminalen så får jag korrekt utskrift.

Mottagrens kod är:

char radioinput = 0;
int k=0;
while(1){
radioinput=getc();
printf("\rRadio input: %u varv:",radioinput,k);
}


Den går ett varv och sedan händer inget pga att den inte får in något på getch antar jag.

Båda piccarna är initierade så:


#include <18F452.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=12000000)
#use rs232(baud=19200, xmit=PIN_C6, rcv=PIN_C7)



Är väldigt glad över all hjälp! :)
Ackee
Inlägg: 6
Blev medlem: 6 april 2005, 12:47:38

Inlägg av Ackee »

får inte ens den seriella kommunikationen att fungera emellan PIC:arna så antagligen är det där skon klämmer :(
Användarvisningsbild
Icecap
Inlägg: 26630
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Jag tycker att du måste ha en fördröjning i sändarens loop, annars får den ju aldrig andrum till att sända i.

Kod: Markera allt

while (1)
  {
  printf("\n Sending...");
  // Här bör det vara en paus på minst 10ms, gärna mer
  }
Sen kan du ju med MAX232 och hyperterminalen kolla om något kommer ur mottagaren.

Jag kopplade den enbart med +, GND och Serout och det rasslade på så fint så du kanske gör rätt med busy osv men jag har inte kommit så långt att det behövs.
Skriv svar