IR Reciever till pickit2/16F690

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Xor
Binär
Inlägg: 15
Blev medlem: 12 juni 2006, 08:00:24
Ort: Eskilstuna
Kontakt:

IR Reciever till pickit2/16F690

Inlägg av Xor »

Hej på er!

Jag har precis startat med pic-programmering efter jag upptäckt att man nu mera kan knacka C till även mindre processorer.

Som första projekt så håller jag på med en IR-Förlängare eftersom det involverar få komponenter och jag fatiskt kan ha nytta av resultatet.

Nu har jag fått till 38kHz PWM, men mitt problem är att jag inte får ir-pulserna att registeras som input på RC5. Har förmodligen missuppfattat någonting enkelt och ber därför om hjälp. Om jag ger +Vdd med hjälp av bygel så får jag en fin diod, men ingenting via IR -Mottagaren.

Schema:
Bild


Kod:

Kod: Markera allt

/*
PIC16F690

/* STANDARD INCLUDES */
#include <stdio.h>
#include <stdlib.h>
#include <pic.h>
#include <string.h>
#include "delay.h"

/* CONFIGURATION MACRO */
__CONFIG(INTIO & WDTDIS & PWRTDIS & MCLRDIS & UNPROTECT & BORDIS & IESODIS & FCMDIS);

/* ------------------------------------ MAIN ----------------------------------------*/

/* MAIN APPLICATION */
void main (void)
{
	INTCON=0;	// disable the interrupts
	PORTC = 0x00; // turn all PORTC off

	// setup Timer0	for Clock
	OPTION = 0b0000;	// prescale by 2

	T0IF = 0; // clear timer interrupt flag
	T0IE = 1; // start timer interrupt
	
	// setup PWM output to 38khz
	CCP1CON=0;
	TMR2=0;
	PR2=0x18;			// 38khz period
	CCPR1L=0x09;  		// 50% duty cycle

	TRISC = 0x11110000;
	TRISA = 0b11111111;
	TMR2ON=1;
	
	// Enable Interrupts
	PIE1 = 1;
	PEIE = 1;
	GIE = 1; // enable global interrupts
	
	CCP1CON=0b00001100; 
	while(1){
		if(RC5){
			PSTRCON=0b00000000;
		} else {
			PSTRCON=0b00001100;
		}
	}
}
Senast redigerad av Xor 11 maj 2009, 17:46:19, redigerad totalt 1 gång.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: IR Reciever till pickit2/16F690

Inlägg av sodjan »

Använd code-taggarna så att det går att läsa.

> // Enable Interrupts

Varför ? Var använder du interrupt ?

> Om jag ger +Vdd med hjälp av bygel så får jag en fin diod,

Fattar inget. Vad betyder "ger +Vdd" (och vart) och "fin diod" ?
Xor
Binär
Inlägg: 15
Blev medlem: 12 juni 2006, 08:00:24
Ort: Eskilstuna
Kontakt:

Re: IR Reciever till pickit2/16F690

Inlägg av Xor »

sodjan skrev:Använd code-taggarna så att det går att läsa.
> // Enable Interrupts
Varför ? Var använder du interrupt ?
> Om jag ger +Vdd med hjälp av bygel så får jag en fin diod,
Fattar inget. Vad betyder "ger +Vdd" (och vart) och "fin diod" ?
Hej, visste inte om code-taggen. Nu är det fixat i orginalposten.

Interrupt-blocket är kvar sedan tidigare tester, glömde bara radera ut det.

Bygeln var ett test för att ge en signal in på RC5, motsvarande det som IR-Modulen ska ge (om jag fattat det hela rätt).
Om jag alltså manuellt ger inspänning på RC5 så får jag en PWM signal på dioderna (RC2,RC3).
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: IR Reciever till pickit2/16F690

Inlägg av sodjan »

> ...men mitt problem är att jag inte får ir-pulserna att registeras...

Vilka "IR-pulser" ? Var kommer dom ifrån ?

> Interrupt-blocket är kvar sedan tidigare tester, glömde bara radera ut det.

OK, det har antagligen inte med grundfrågan att göra, men jag vill ända säga följande...

Slarva inte med kod du postar. Det var ju bara 10-20 rader att kolla innan du postade
och det signalerar bara att du sannolikt slarvar generellt vilket minskar lusten hos
alla att bry sig alls. För övrigt så är koden fortfarande kvar, det är enkelt att
rätta koden antingen i första inlägget, men helst i ett nytt inlägg så att inte
"flödet" i tråden blir helt konstigt.

Jag tänker inte kommentera citering av hela föregående inlägg, du får kolla upp vad
det står i reglerna själv (därmed inte sagt att jag bryr mig personligen om det)... :-)

Hur som helst, nyckeln här verkar vara dina "IR-pulser". Berätta gärna mer om dom.
Samot
Inlägg: 311
Blev medlem: 15 november 2004, 18:32:13

Re: IR Reciever till pickit2/16F690

Inlägg av Samot »

Hej!

Du behöver ha en konding till TSOP4838. Annars ger den bara skräp ut...
Xor
Binär
Inlägg: 15
Blev medlem: 12 juni 2006, 08:00:24
Ort: Eskilstuna
Kontakt:

Re: IR Reciever till pickit2/16F690

Inlägg av Xor »

Koden nu uppstädad från oväsentligheter.

Kod: Markera allt

/*
PIC16F690

/* STANDARD INCLUDES */
#include <stdio.h>
#include <stdlib.h>
#include <pic.h>
#include <string.h>
#include "delay.h"

/* CONFIGURATION MACRO */
__CONFIG(INTIO & WDTDIS & PWRTDIS & MCLRDIS & UNPROTECT & BORDIS & IESODIS & FCMDIS);

/* ------------------------------------ MAIN ----------------------------------------*/

/* MAIN APPLICATION */
void main (void)
{
	INTCON=0;	// disable the interrupts
	PORTC = 0x00; // turn all PORTC off

	// setup Timer0	for Clock
	OPTION = 0b0000;	// prescale by 2

	T0IF = 0; // clear timer interrupt flag
	T0IE = 1; // start timer interrupt
	
	// setup PWM output for 38khz output for 1-bit's (uses Timer2)
	CCP1CON=0;
	TMR2=0;
	PR2=0x18;			// 38khz period
	CCPR1L=0x09;  		// about 50% duty cycle

	TRISC = 0x11110000;
	TRISA = 0b11111111;
	TMR2ON=1;
	
	CCP1CON=0b00001100; 
	while(1){
		if(RC5){
			PSTRCON=0b00001100;
		} else {
			PSTRCON=0b00000000;
		}
	}
}
sodjan skrev: Vilka "IR-pulser" ? Var kommer dom ifrån ?
IR-Modulen (TSOP4838) som är inkopplad med OUT-Pinnen till RC5 på processorn. Den borde väl ge mig ett antal signaler med spänning när jag skickar en IR-Signal till den från en fjärrkontroll, eller har jag helt missuppfattat hur denna fungerar? Jag har tyvärr inte tillgång till oscilloskop hemma så jag an inte dubbelkolla detta.

ps. Jag försöker följa forums regler och etikett, men i början blir det inte alltid 100%-igt. Jag ber om ursäkt för detta och hoppas på en bra dialog framöver. :)
Xor
Binär
Inlägg: 15
Blev medlem: 12 juni 2006, 08:00:24
Ort: Eskilstuna
Kontakt:

Re: IR Reciever till pickit2/16F690

Inlägg av Xor »

Samot skrev: Du behöver ha en konding till TSOP4838. Annars ger den bara skräp ut...
Jag provade precis med en konding och bytte även Mottagare, men jag får fortfarande ingen signal på RC5.
Testade även att lägga 0,5s delay efter tändningen av dioderna för att se om det fungerade med gick för snabbt för att se med blotta ögat, men inte heller det gav något resultat.

Jag misstänker att jag gör något fel vid avläsningen av RC5, kan man inte göra på detta sätt vid signal från TSOP4838?
bearing
Inlägg: 11677
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: IR Reciever till pickit2/16F690

Inlägg av bearing »

Jag gissar att det är IR-källan; fjärrkontrollen som sodjan var intresserad av att höra om den fungerar och ger signaler som mottagaren reagerar på.
Xor skrev: Jag misstänker att jag gör något fel vid avläsningen av RC5
Prova att koppla in något annat som ger signal på pinnen. En knapp, sladdstump, typ.
Xor
Binär
Inlägg: 15
Blev medlem: 12 juni 2006, 08:00:24
Ort: Eskilstuna
Kontakt:

Re: IR Reciever till pickit2/16F690

Inlägg av Xor »

bearing skrev:Jag gissar att det är IR-källan; fjärrkontrollen som sodjan var intresserad av att höra om den fungerar och ger signaler som mottagaren reagerar på.
Jag kan inte komma på något sätt att testa detta utan oscilloskop, dock så har jag provat alla fjärrkontroller som finns i lägenheten med samma dåliga resultat.
bearing skrev: Prova att koppla in något annat som ger signal på pinnen. En knapp, sladdstump, typ.
Det var det jag gjorde med min bygling (sladdstump mellan Vdd och RC5), och det ger korrekt resultat.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: IR Reciever till pickit2/16F690

Inlägg av sodjan »

Du måste nog verifiera att din IR-mottagare fungerar med just de
"fjärrar" som du testar med. Det här är ju inget speciellt nytt område
och det finns massor av info på "nätet". Har du provat att googla
lite på just de fjärrar som du har provat med ? Är de 38 KHz fjärrar som
din mottagare lyssnar på ? Om du inte får en signal från mottagaren
så spelar det ju ingen som helst roll vad du gör i koden...

Ingången har du ju verifierat med en fast koppling, så det tror
jag inte att det är.
bearing
Inlägg: 11677
Blev medlem: 2 mars 2006, 01:01:45
Ort: Ängelholm

Re: IR Reciever till pickit2/16F690

Inlägg av bearing »

Vad händer om IR-dioden på kopplingsdäcket riktas mot mottageren?

ps. 0x09 är inte 50% av 0x18. ds.

ps2. Varför inte använda decimala tal? 0x18 är 24 decimalt vilket ger en period på 25 us vid 4 MHz. 26 us period är närmare 38 kHz. ds2.
Xor
Binär
Inlägg: 15
Blev medlem: 12 juni 2006, 08:00:24
Ort: Eskilstuna
Kontakt:

Re: IR Reciever till pickit2/16F690

Inlägg av Xor »

Nu har jag kollat lite mer efter att hämtat hem min multimeter.

IR-Modulen ger +4,74V konstant på signalpinnen. Då jag ger den signal med fjärrkontrollen så sjunker spänningen helt enligt databladet (active low, detta missade jag tidigare). Jag har även ändrat mitt program som ett test att tända lysdioderna vid ingen signal på RC5 istället för tvärt om.

Nu är det dock så konstigt att om jag med en bygel ger RC5 +4.75V från Vdd på labbrädan då släcks dioderna som de ska.
Om jag däremot ger spänningen från signalpinnen (vilken är +4.74V enligt mätning) då händer ingenting?!?!

Ger IR-Modulen för lite ström eller vad är det som händer egentligen?

Jag har ingen aning om vad mitt nästa steg är, alla förslag tas tillvara med tacksamhet!
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: IR Reciever till pickit2/16F690

Inlägg av sodjan »

> Om jag däremot ger spänningen från signalpinnen (vilken är +4.74V enligt mätning) då händer ingenting?!?!

Ligger spänningen kvar på samma nivå även med mottagaren inkopplad till RC5 ?

> Ger IR-Modulen för lite ström

Fullständigt ointressant. Det är bara spänningsnivåerna som betyder något.
Xor
Binär
Inlägg: 15
Blev medlem: 12 juni 2006, 08:00:24
Ort: Eskilstuna
Kontakt:

Re: IR Reciever till pickit2/16F690

Inlägg av Xor »

Jag har hittat bekymmret, det var kodfel i alla fall!

Detta står i databladet om CCP1CON (för PWM)
If CCP1M<3:2> = 11:
00 = Single output; P1A modulated; P1B, P1C, P1D assigned as port pins


P1A är tydligen samma fysiska pinne som RC5. Jag hade otur när jag valde min input, och allt blev klart mystiskt. Jag begriper fortfarande inte riktigt hur och vad som hände, men skumt blev det.

Efter jag bytt till RB6 så fungerar allt precis som det ska, JIPPIE! :D
Alla 6 fjärrkontroller fungerar perfekt och jag har mottagning genom hela rummet utan bekymmer.

Här är det slutgiltiga schemat samt koden om någon skulle vara intresserad:

Bild

Kod: Markera allt

/*
PIC16F690

(c) Kalle Sandberg 2009

IR-Repeater, Reads input on RB6 from IR-Module and 
outputs 38kHz modulated signal to IR-leds on RC2 & RC3
 /*

/* STANDARD INCLUDES */
#include <stdio.h>
#include <stdlib.h>
#include <pic.h>

/* CONFIGURATION MACRO */
__CONFIG(INTIO & WDTDIS & PWRTDIS & MCLRDIS & UNPROTECT & BORDIS & IESODIS & FCMDIS);

/* ------------------------------------ MAIN ----------------------------------------*/

/* MAIN APPLICATION */
void main (void)
{
	INTCON=0;			// disable the interrupts
	PORTC = 0x00; 		// turn all PORTC off before initiating PWM

	// Setup PWM for 38kHz output
	CCP1CON=0;
	TMR2=0;				// Turn off timer2 before setup
	PR2=0x18;			// 38kHz period
	CCPR1L=0x09;  		// about 50% duty cycle

	TRISC = 0x11110011; // Set RC3 & RC4 as outputs
	TRISB = 0b11111111; // Set all RB as inputs
	TMR2ON=1; 			// Turn on timer2 for PWM
	
	CCP1CON=0b00001100; // Set up PWM as single mode

	// Read input and toggle PWM on/off
	while(1){
		if(RB6){ 		// TSOP4838 = Active low
			PSTRCON=0b00000000; // Turn PWM off
		} else {
			PSTRCON=0b00001100; // Turn PWM on
		}
	}
}
Edit: stavfel
Senast redigerad av Xor 15 maj 2009, 08:23:34, redigerad totalt 1 gång.
Xor
Binär
Inlägg: 15
Blev medlem: 12 juni 2006, 08:00:24
Ort: Eskilstuna
Kontakt:

Re: IR Reciever till pickit2/16F690

Inlägg av Xor »

Jag har två frågor till framtida projekt vilket jag inte lyckas förstå av databladet:

1) Hur väljer jag om input ska ha jord eller +V (active high/low) för att vara sanna, och är standard alltid jord?

2) Hur väljer jag om outputs ska ge jord eller +V?
Skriv svar