]>
cloudbase.mooo.com Git - irmp.git/blob - irmp-main-pic-12F1840.c
1 /*---------------------------------------------------------------------------------------------------------------------------------------------------
2 * main_pic12f1840.c - example main module for PIC 12f1840
4 * IR decoder using IRMP
6 * (c) 2014 Wolfgang Strobl (news4 at mystrobl.de) 2014-03-12:2014-07-20
8 * This demo module is runnable on a Microchip PIC 12F1840
10 * To be used with IRMP by Frank Meyer (frank(at)fli4l.de)
11 * <http://www.mikrocontroller.net/articles/IRMP>
13 * This program is free software; you can redistribute it and/or modify
14 * it under the terms of the GNU General Public License as published by
15 * the Free Software Foundation; either version 2 of the License, or
16 * (at your option) any later version.
17 *---------------------------------------------------------------------------------------------------------------------------------------------------
23 Hauptprogramm fuer den nachfolgenden Testaufbau, bestehend aus zwei mal
29 ___ +--GP5--o| |o--GP0 / ICSPDAT
30 RS232 out -|___|-------GP4--o| |o--GP1 / ICSPCLK ___ LED
31 RS232 in -|___|---Vpp/GP3--o|__|o--GP2-----------|___|- ->|---Vss
34 auf einem Steckbrett. (Genauer gesagt, dies ist die aktuelle Beschaltung
35 fuer V1.8, V1.0 ist aber bzgl. IRMP-Empfang funktional identisch. Nicht eingezeichnet
36 ist ein Abblockkondensator von 100nF ueber Vss und Vdd.
38 Uebersetzt mit Microchip MPLAB XC8 C Compiler (Free Mode) V1.31
39 im stark gecrippelten "Free Mode".
41 Memory Summary: (V 1.8)
42 Program space used C6Fh ( 3183) of 1000h words ( 77.7%)
43 Data space used 9Bh ( 155) of 100h bytes ( 60.5%)
44 EEPROM space used 0h ( 0) of 100h bytes ( 0.0%)
45 Data stack space used 0h ( 0) of 5Eh bytes ( 0.0%)
46 Configuration bits used 2h ( 2) of 2h words (100.0%)
47 ID Location space used 0h ( 0) of 4h bytes ( 0.0%)
53 urspruengliche Version des Programms als Empfaenger,
54 aktuelle Version als Sender, Aufzeichnung mit putty,
55 angeschlossen jeweils per USB2RS232-Kabel von Conrad
56 (972543, basierend auf Prolific PL2303). Soft-UART
57 fuer Input, da 12F1820 keine Kontrolle ueber Input-
58 Polaritaet erlaubt und ich fuer Testaufbauten eine
59 Minimalbeschaltung bevorzuge.
62 (~30 cm) zwischen Sender und Empfaenger), keine genaue Ausrichtung.
63 Stromversorgung wahlwweise mit 5V via PICkit 2 oder 3x1.2V NiMH-AA.
66 CD TAPE TUNER AUX OFF mit Philips FB,
67 OFF mit VAOVA TV-2900HDD FB
68 dann Eingabe . und n beim Sender.
72 IRMP PIC 12F1840 1.8 ws
73 P 7 a=0x0014 c=0x003f f=0x00 (RC5)
74 P 7 a=0x0014 c=0x003f f=0x01 (RC5)
75 P 7 a=0x0012 c=0x003f f=0x00 (RC5)
76 P 7 a=0x0011 c=0x003f f=0x00 (RC5)
77 P 7 a=0x0015 c=0x003f f=0x00 (RC5)
78 P 7 a=0x0015 c=0x000c f=0x00 (RC5)
79 P 2 a=0xbf00 c=0x0059 f=0x00 (NEC)
80 P 2 a=0xbf00 c=0x0059 f=0x01 (NEC)
86 IRMP PIC 12F1840 1.0 ws
87 P 7 a=0x0014 c=0x003f f=0x00 (RC5)
88 P 7 a=0x0014 c=0x003f f=0x01 (RC5)
89 P 7 a=0x0012 c=0x003f f=0x00 (RC5)
90 P 7 a=0x0011 c=0x003f f=0x00 (RC5)
91 P 7 a=0x0015 c=0x000c f=0x00 (RC5)
92 P 2 a=0xbf00 c=0x0059 f=0x00 (NEC)
93 P 2 a=0xbf00 c=0x0059 f=0x01 (NEC)
94 P 7 a=0x0015 c=0x000c f=0x00 (RC5)
95 P 7 a=0x0015 c=0x000c f=0x01 (RC5)
96 P 7 a=0x0015 c=0x000c f=0x01 (RC5)
97 P 2 a=0x0055 c=0x00aa f=0x00 (NEC)
99 Die via DSO an der LED gemessenen Frequenzen sind 36.0 resp. 38.0 kHz
108 /******************************************************************************/
110 /******************************************************************************/
111 #define SYS_FREQ 32000000L
112 #define _XTAL_FREQ 32000000 // for _delay
113 #define FCY (SYS_FREQ/4)
115 /******************************************************************************/
117 /******************************************************************************/
126 SPLLEN
=1; // p 46 and 54
129 /******************************************************************************/
130 // "configuration_bits.c" 12F1848
131 /******************************************************************************/
133 #pragma config FOSC = INTOSC // Oscillator Selection (INTOSC oscillator: I/O function on CLKIN pin)
134 #pragma config WDTE = OFF // Watchdog Timer Enable (WDT disabled)
135 #pragma config PWRTE = ON // Power-up Timer Enable (PWRT enabled)
136 #pragma config MCLRE = OFF // MCLR Pin Function Select (MCLR/VPP pin function is digital input)
137 #pragma config CP = OFF // Flash Program Memory Code Protection (Program memory code protection is disabled)
138 #pragma config CPD = OFF // Data Memory Code Protection (Data memory code protection is disabled)
139 #pragma config BOREN = ON // Brown-out Reset Enable (Brown-out Reset enabled)
140 #pragma config CLKOUTEN = OFF // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin)
141 #pragma config IESO = OFF // Internal/External Switchover (Internal/External Switchover mode is disabled)
142 #pragma config FCMEN = OFF // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is disabled)
145 #pragma config WRT = OFF // Flash Memory Self-Write Protection (Write protection off)
146 #pragma config PLLEN = OFF // PLL Enable (4x PLL disabled)
147 #pragma config STVREN = ON // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will cause a Reset)
148 #pragma config BORV = LO // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.)
149 #pragma config LVP = OFF // Low-Voltage Programming Enable (High-voltage on MCLR/VPP must be used for programming)
150 /******************************************************************************/
152 /******************************************************************************/
154 /******************************************************************************/
159 #define SOFTUART_RXPIN GPIO3
160 #define SOFTUART_STDIO 1
161 #define SOFTUART_DI 1
164 #define BAUD 19200 // 38200 ginge auch noch
165 #define SOFTUART_BAUD BAUD
166 #include "softuart_pic.h"
168 #define kbhit softuartkbhit
175 TXCKSEL
= 1; // put TX on pin 4 - not 0 -, p 102
176 SPBRGL
= (_XTAL_FREQ
/BAUD
/64-1);
181 SYNC
= 0; // 0 p. 267
182 SPEN
= 1; // 26.1.1.7
183 SCKP
= 1; // invert p 269
191 while (!TRMT
) _delay(1);
195 /******************************************************************************/
197 /******************************************************************************/
203 TMR1
=0xFC00; // p. 155 wait 1024 cycles for stabilization.
204 TMR1CS1
=0; // Clock source == System Clock
206 TMR1IE
=1; // enable TMR1 interrupts
207 PEIE
=1; // enable Pheripheral Interrupts
213 /******************************************************************************/
215 /******************************************************************************/
217 void interrupt
isr(void)
219 TMR1
=0xffff-_XTAL_FREQ
/F_INTERRUPTS
;
220 TMR1IF
=0; // clear timer 1 interrupt
231 void RC5(uint16_t addr
,uint16_t cmd
, uint8_t repetitions
)
233 irmp_data
.protocol
= IRMP_RC5_PROTOCOL
;
234 irmp_data
.address
= addr
;
235 irmp_data
.command
= cmd
;
236 irmp_data
.flags
= repetitions
;
237 irsnd_send_data (&irmp_data
, FALSE
);
240 void NEC(int addr
,int cmd
)
242 irmp_data
.protocol
= IRMP_NEC_PROTOCOL
;
243 irmp_data
.address
= addr
;
244 irmp_data
.command
= cmd
;
246 irsnd_send_data (&irmp_data
, FALSE
);
250 /******************************************************************************/
252 /******************************************************************************/
265 printf("IRMP PIC 12F1840 1.8 ws\r\n");
266 irmp_init(); // initialize irmp
267 timer1_init(); // initialize timer1
268 ei(); // enable interrupts
269 TMR1ON
=1; // start timer
276 if (c
>32 && c
<127) putch(c
);
281 RC5(0x15,0x0c,2); // Philips MC115 AUX OFF
293 while (irsnd_is_busy ()) ;
294 printf("PR2 %d\r\n",PR2
);
297 if (irmp_get_data (&irmp_data
))
300 printf("%d a=0x%04x c=0x%04x f=0x%02x (",irmp_data
.protocol
, irmp_data
.address
,irmp_data
.command
,irmp_data
.flags
);
302 #if IRMP_PROTOCOL_NAMES
303 printf(irmp_protocol_names
[irmp_data
.protocol
]);
305 switch(irmp_data
.protocol
)