Sono di seguito riportati gli schemi elettrici della scheda T, della scheda R, e il
firmware del microcontrollore.
C C B B A A SISTEMA COMPLETO A TACHIMETRO A4 1 1 Title
Size Document Number Rev
Date: Sheet of
TRASMETTITORE
TRASMETTITORE
RICEVITORE
D D C C B B A A DAL RICEVITORE CONNETTORE TWEETER TACHIMETRO - TRASMETTITORE A SCHEMA A BLOCCHI A4 1 6 Title
Size Document Number Rev
Date: Sheet of MICRO MICRO SEGNALE_1 V_PILOTAGGIO_1 V_PILOTAGGIO_2 S C K /C S _ T E M P S O _ T E R M SEGNALE_2 SEGNALE_3 ALIMENTAZIONE ALIMENTAZIONE CIRCUITO_PILOTAGGIO CIRCUITO_PILOTAGGIO V_PILOTAGGIO_1
V_PILOTAGGIO_2 V_PONTE_1V_PONTE_2
SENSORE_TEMPERATURA SENSORE_TEMPERATURA SO_TEMP /CS_TEMP SCK FILTRO FILTRO V_OUT_1 V_PONTE_1 V_PONTE_2 V_OUT_2 VCC J1 CON8 1 2 3 4 5 6 7 8 LS1 SPEAKER
C C B B A A CONNETTORE ALIMENTAZIONE TRANZORB TACHIMETRO - TRASMETTITORE A ALIMENTAZIONE A4 2 6 Title
Size Document Number Rev
Date: Sheet of +12Vin GND VCC +12V J2 CON2 1 2 D4 MBRS340T3 SMC D5 LED VERDE R2 2.2k 5% L1 27uH <0.1 Ohm 3.0 A TP1 VCC 1 D1 MBRS340T3 SMC TP2 GND 1 + C1 22uF 50V CB1 0.01u U1 LM2676-5.0 1 2 3 4 5 6 7 SWITCH_OUT VIN BOOST G N D N C FB O N /O F F D3 LED VERDE D2 SA12A DO-15 + C2 100uF 16V 0.1 Ohm R1 4.7k 5% F1 FUSE
D D C C B B A A SEMI-PONTE 1 SEMI-PONTE 2 SEMI-PONTE 1 SEMI-PONTE 2 TACHIMETRO - TRASMETTITORE A CIRCUITO PILOTAGGIO A4 3 6 Title
Size Document Number Rev
Date: Sheet of VCC VCC VCC + C3 100uF + C4100uF P N U3A IRF7343 1 2 7 8 3 4 5 6 R3 10 R4 10 P N U2A IRF7343 1 2 7 8 3 4 5 6 V_PONTE_1 V_PONTE_2 V_PILOTAGGIO_1 V_PILOTAGGIO_2
C C B B A A TACHIMETRO - TRASMETTITORE A FILTRO A 4 6 Title
Size Document Number Rev
Date: Sheet of C5 220nF C7 220nF L2 22uH 1 2 L3 22uH 1 2 C6 1.5uF V_OUT_1 V_OUT_2 V_PONTE_1 V_PONTE_2
D D C C B B A A CONNETTORE IN-SYSTEM PROGRAMMING ATMEGA16 PIN 10,11 CIRCUITO DI RESET MAX232 16,15 CONNETTORE RS232 DEBUG DAL RICEVITORE TACHIMETRO - TRASMETTITORE A MICROPROCESSORE E RS232 A4 5 6 Title
Size Document Number Rev
Date: Sheet of MOSI SCK MISO MOSI /RESET /RESET RX_232 RTS_MAX RTS CTS-232 TXD RXD RTS_MAX TX_232 RTS-232 CTS_MAX CTS_MAX RXD TXD CTS SCK MISO SEGNALE_3 SEGNALE_3 VCC VCC VCC VCC VCC VCC VCC J3 JUMPER 1 2 U5 MAX232CPE DIP14 1 3 4 5 2 6 12 9 11 10 13 8 14 7 C1+ C1-C2+ C2-V+ V-R1OUT R2OUT T1IN T2IN R1IN R2IN T1OUT T2OUT R8 22k 5% J4 JUMPER 1 2 J6 JUMPER 1 2 C19 0.1uF +C15 1uF P1 CONNECTOR DB9 CON-DB9HF 5 9 4 8 3 7 2 6 1 C11 22pF C1222pF C18 0.1uF R7 4.7k 5% J5 HEADER 5X2 HEADER5X2 2 4 6 8 10 1 3 5 7 9 + C17 1uF J7 JUMPER 1 2 + C14 1uF Y1 8MHz XTAL1 1 2 R5 22k 5% C10 0.1uF +C13 1uF + C16 1uF U4 ATMEGA16 - 16AI DIP40 6 7 8 9 12 13 14 15 16 17 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 1 2 3 4 5 18 PB5 (MOSI) PB6 (MISO) PB7 (SCK) RESET XTAL2 XTAL1 PD0 (RXD) PD1 (TXD) PD2 (INT0) PD3 (INT1) PD5 (OC1A) PD6 (ICP1) PD7 (OC2)PC0 (SCL) PC1 (SDA)PC2 (TCK) PC3 (TMS) (TDO) PC4 (TDI) PC5 (TOSC1) PC6 (TOSC2) PC7AVCC GND AREF (ADC7) PA7 (ADC6) PA6 (ADC5) PA5 (ADC4) PA4 (ADC3) PA3 (ADC2) PA2 (ADC1) PA1 (ADC0) PA0 (XCK/TO) PB0 (T1) PB1 (AIN0/INT2) PB2 (AIN1/OC0) PB3 (SS) PB4 PD4 (OC1B) C8 10nF R6 22k 5% C9 0.1uF V_PILOTAGGIO_1 V_PILOTAGGIO_2 SCK /CS_TEMP SEGNALE_1 SO_TERM SEGNALE_2 SEGNALE_3
C C B B A A TACHIMETRO - TRASMETTITORE A SENSORE TEMPERATURA A 6 6 Title
Size Document Number Rev
Date: Sheet of VCC VCC U6 MAX6629 1 2 3 4 5 6 NC GND VCC SCK CS SO C20 0.1uF SO_TEMP /CS_TEMP SCK
D D C C B B A A CAPSULA MICROFONICA PREAMPLIFICATA AL TRASMETTITORE TACHIMETRO - RICEVITORE A SCHEMA A BLOCCHI A4 1 5 Title
Size Document Number Rev
Date: Sheet of AMPLIFICATORE AMPLIFICATORE OUT_AMPL MIC_OUT ALIMENTAZIONE ALIMENTAZIONE FILTRO_PASSA_BANDA FILTRO_PASSA_BANDA OUT_FILTRO IN_FILTRO DECISORE DECISORE
OUT_FILTRO OUT_1OUT_2
OUT_3 VCC VCC FET MK1 MICROPHONE 3 1 2 J1 8 HEADER 1 2 3 4 5 6 7 8
C C B B A A CONNETTORE ALIMENTAZIONE FORI DI FISSAGGIO -5V +5V TACHIMETRO - RICEVITORE A ALIMENTAZIONE A4 2 5 Title
Size Document Number Rev
Date: Sheet of VEE VCC +C4 47uF U1 ICL7660S 1 5 8 6 7 2 4 BOOST VOUT V+ LV OSC CAP+ CAP-X4 HOLE 1 TP1 VEE 1 X2 HOLE 1 X1 HOLE 1 TP3 GND 1 C5 0.1uF + C2 10uF X3 HOLE 1 J2 CON2 1 2 TP2 VCC 1 +C1 10uF C3 0.1uF
D D
C C
B B
A A
TACHIMETRO - RICEVITORE <RevCode>
AMPLIFICATORE
A4
3 5
Title
Size Document Number Rev
Date: Sheet of VEE VCC VEE VCC R4 10k 1% C7 0.1uF U2A TL082 3 2 8 4 1 + -V + V -OUT R1 10k 1% R2 10k 1% C6 68nF C8 0.1uF R3 200k MIC_OUT OUT_AMPL
C C B B A A RIVELATORE DI INVILUPPO TACHIMETRO - RICEVITORE A DECISORE A4 4 5 Title
Size Document Number Rev
Date: Sheet of V_REF_2 V_REF_2 V_REF_3 V_REF_3 VEE VEE VCC VCC VEE VCC VCC VEE VCC VCC VEE U5 LP211 7 2 3 1 8 4 6 5 COUT + - EO V + V -B/S B R13 10k D1 1N4148 R9 10k C17 0.1uF R10 10k U4 LP211 7 2 3 1 8 4 6 5 COUT + - EO V + V -B/S B R16 10k R11 100k R17 470k C13 0.1uF C10 10nF C15 0.1uF R14 390k C16 0.1uF C14 0.1uF C12 1nF R15 100k C18 0.1uF R12 390k C11 10nF OUT_2 OUT_3
D D
C C
B B
A A
TACHIMETRO - RICEVITORE A
FILTRO PASSA BANDA A
5 5
Title
Size Document Number Rev
Date: Sheet of VCC VEE C20 2.2n R21 4.7k R19 3k U2B TL082 5 6 8 4 7 + -V + V -OUT R18 5.6k C19 2.2n R20 4.7k IN_FILTRO OUT_FILTRO
/* codice di inizializzazione richiamato automaticamente dopo il reset */ int __low_level_init (void)
{ PORTA = 0x00; DDRA = 0xFF; PORTB = 0x00; DDRB = 0xFF; PORTC = 0x00; DDRC = 0xFC; //PC0 e PC1 input PORTD = 0x00; DDRD = 0x91; //PD6, PD5 e PD3
return 1; // CSTARTUP initialize data segments
}
/* codice di inizializzazione richiamato nel main */ int init_lowlevel (void)
{ __disable_interrupt(); TIMSK = 0x00; TIFR = 0xFF; __enable_interrupt(); Init_TIMER_1(); Init_TIMER_2(); return 0; }
void main (void)
{
init_lowlevel();
// ciclo infinito
for (;;) {
if (GETBIT(PINC,0)==0) flag = 1; //Start pilotaggio
else if (GETBIT(PINC,1)==0) flag = 0; //Stop pilotaggio
} }
*note: Procedure di inizializzazione e gestione timer,
generazione treni di impulsi ******************************************************************/ #include <iom16.h> #include <inavr.h> #include "TYPE.H" #include "TIMER.H" #include "PORT.H"
static BYTE numero_impulsi = 0;
extern BYTE flag;
/* Inizializzazione timer di sistema (16 bit) */ void Init_TIMER_1 (void)
{
__disable_interrupt();
//SFIOR REGISTER - Special Function I/O Register
SFIOR |= 0x01; //Bit 0 – PSR10: Prescaler Reset Timer/Counter 1 e 0
/*
Registri TCCR1A e TCCR1B: Configurazione modalità di funzionamento Timer/Counter 1: -> Normal port operations
-> MODE 4: CTC (Clear Timer on Compare Match whit OCR1A)
Waveform Generation Mode Bit Description (WGM13,WGM12,WGM11,WGM10)=0100 */
TCCR1A = 0x00;
TCCR1B = 0x08 | PRESCALER_1;
//Inizializzatione registro contatore a zero
TCNT1H = 0x00; // 8 bit MSB TCNT1 REGISTER
TCNT1L = 0x00; // 8 bit LSB TCNT1 REGISTER
/*aggiornamento solo registro temporaneo OCR1A*/
OCR1AH = (BYTE)((VALUE_TIMER_1 >> 8) & 0x00FF); // 8 bit MSB OCR1A REGISTER - Output Compare
/* aggiornamento reale OCR1A */
OCR1AL = (BYTE)(VALUE_TIMER_1 & 0x00FF); // 8 bit LSB OCR1A REGISTER - Output Compare Registe
TIFR |= 0x10; // Clear (set to 1) flag OCF1A (Timer/Counter1, Output Compare 1 A Match Flag)
/*
TIMSK REGISTER - Timer/Counter Interrupt Mask Register
Bit 4 – OCIE1A: Timer/Counter 1 Output Compare A Match Interrupt Enable */
TIMSK |= 0x10; //Abilitazione Timer1
__enable_interrupt(); //Setta bit 7 (I) di SREG
return; }
void Init_TIMER_2 (void)
{
__disable_interrupt();
//ASSR REGISTER - Asynchronous Status Register 2
//Bit 3 – AS2: Asynchronous Timer/Counter 2
// 0-> internal clock source; 1-> external crystal on TOSC1 pin
ASSR = 0x00;
//SFIOR REGISTER - Special Function I/O Register
SFIOR |= 0x02; //Bit 1 – PSR2: Prescaler Reset Timer/Counter 2
Bit 7 – OCIE2: Timer/Counter 2 Output Compare Match Interrupt Enable*/
TIMSK |= 0x80; //Abilitazione Timer 2
__enable_interrupt(); //Setta bit 7 (I) di SREG
return; }
/*
Routine associata all'interrupt Timer/Counter 1 Output Compare A Match interrupt */
#pragma vector= TIMER1_COMPA_vect
__interrupt void Invio_treno_impulsi (void)
{
if (flag == 1) //Se pilotaggio è attivo
{
numero_impulsi = 0;
//Abilitazione Timer/Counter 2 per generare i tempi di riferimento interni al treno di impul
OCR2 = TEMPO_1;
TCCR2 = 0x08 | PRESCALER_2; //Clear Timer on Compare
//Start treno di impulsi
CLEAR_PILOTAGGIO_2; SET_PILOTAGGIO_1; } return; } /*
Routine associata all'interrupt Timer/Counter 2 Output Compare Match interrupt */
#pragma vector= TIMER2_COMP_vect
__interrupt void TIMER2_Compare_OK (void)
{ if (OCR2 == TEMPO_1) { CLEAR_PILOTAGGIO_1; CLEAR_PILOTAGGIO_2; numero_impulsi++; OCR2 = TEMPO_2; }
else //OCR2 != TEMPO_1 -> OCR2 == TEMPO_2
{
if ((numero_impulsi & 0x01)) //se il numero di impulsi inviati è dispari
{
SET_PILOTAGGIO_2; }
else //se il numero di impulsi inviati è pari
{ SET_PILOTAGGIO_1; } OCR2 = TEMPO_1; } if (numero_impulsi == NUMERO_IMPULSI_MAX)
TCCR2 = 0x00; //Stop timer 2 TCNT2 = 0x00; CLEAR_PILOTAGGIO_2; CLEAR_PILOTAGGIO_1; } return; }
#define TEMPO_1 188 // 23,5us con clock a 8MHz
#define TEMPO_2 68 // 8,5us con clock a 8MHz
#define SET_PILOTAGGIO_1 SETBIT(PORTA,0)
#define CLEAR_PILOTAGGIO_1 CLEARBIT(PORTA,0)
#define SET_PILOTAGGIO_2 SETBIT(PORTA,1)
#define CLEAR_PILOTAGGIO_2 CLEARBIT(PORTA,1)
#define NUMERO_IMPULSI_MAX 8
/* Impostazione del valore di prescaler Timer/Counter 2 */
//f_timer_2_fast_pwm=f_clk_io/(PRESCALER_2*256) o f_timer_2_pcpwm=f_clk_io/(PRESCALER_2*510) void Init_TIMER_2 (void);
*
* note: definizione di tipi comuni (ANSI C) ******************************************************************/
typedef unsigned char BYTE; typedef unsigned int WORD;