Ho un problema con l'utilizzo del convertitore analogico digitale integrato nel PIC18 Pierin.
Ho in mio possesso un MMA7361, che è una specie di giroscopio, in quanto ha 3 piedini di uscita chiamati x, y e z che mandano tensioni diverse in base all'inclinazione dell'oggetto (su x e y) e all'accelerazione verso il basso o verso l'alto su z. Su di un piano (sulla mia scrivania) si può leggere 1.5V su x e 1.7V su y. La z non la utilizzo.
Quindi ho collegato queste uscite analogiche ai piedini RE2 (AN7) e RE1 (AN6) del PIC per poter acquisire i valori analogici emanati dal dispositivo.
Ho creato quindi due funzioni per acquisire 10 campioni e fare la media su ogni canale.
Una legge 10 volte da RE2 (x) e l'altra 10 volte da RE1 (y). Ci sono poi 2 display 7 segmenti collegati ai PORTB e PORTD per mostrare i valori letti sui piedini analogici (moltiplicati per 10 per non avere la virgola) e dei motori comandati da 4 piedini del PORTC.
Il problema è il seguente: se le due funzioni le utilizzo separatamente, cioè una funziona e l'altra la metto come commento per intenderci, i valori vengono letti giustamente e mostrati sui display moltiplicati per 10. Inoltre le funzioni if per i motori fanno il loro dovere. Nel momento che le metto tutte e due nel programma e devono quindi leggere i valori prima da un canale e poi dal successivo succede un po di casino tra le variabili. In poche parole sulla y si legge sempre lo stesso valore mentre sulla x si può leggere 33 come valore base, mentre normalmente è 15. Siccome 15+17 (che sono i valori di x e y prelevati separatamente) è uguale a 32 sembrerebbe che esso faccia la somma e poi contando le virgole si arriva a 33. Inoltre i due dati sono memorizzati in variabili diverse. Cosa potrebbe essere per voi??
(le funzioni alla fine sono quelle per scrivere sui display a 7 segmenti e funzionano, garantito al limone)
- Codice: Seleziona tutto
// File di definizione dei registri del micro.
#include "p18f47j53.h"
#include <delays.h>
#include <stdio.h>
#include <math.h>
// Header del main
#include "main.h"
// File di configurazione dei fuses
#include "configurazione.h"
// Mappatura delle interrupt
#include "mappa_int.h"
// Definizioni hardware
#include "hardware_def.h"
//------------------------------------------------------------------------------
// Variabili globali
//------------------------------------------------------------------------------
#pragma udata
volatile long int timer_delay; // Timer software
volatile long int sincronismo;
//------------------------------------------------------------------------------
// Funzione di servizio delle interrupt ad ALTA priorità
//------------------------------------------------------------------------------
#pragma code
#pragma interrupt highPriorityInterrupt
void highPriorityInterrupt()
{
// Verifica quale flag ha causato l' interrupt
// Esegui la parte di codice di servizio dell' interrupt
// Azzera il flag che ha causato l' interrupt
// ...
}
//------------------------------------------------------------------------------
// Funzione di servizio delle interrupt a BASSA priorità
//------------------------------------------------------------------------------
#pragma interruptlow lowPriorityInterrupt
void lowPriorityInterrupt()
{
// Verifica quale flag ha causato l' interrupt
// Esegui la parte di codice di servizio dell' interrupt
// Azzera il flag che ha causato l' interrupt
// ...
// Gestione dell' interrupt del timer 2
if(PIR1bits.TMR2IF)
{
// gestione del flag di sincronismo
if (sincronismo) sincronismo = 0;
// gestione del timer software. Il timer software deve decrementarsi
// fino ad arrivare a 0. Una volta arrivato a 0 resta fermo a 0.
if (timer_delay) timer_delay--;
// Resetta il flag che ha generato l' interrupt
PIR1bits.TMR2IF = 0;
}
}
//------------------------------------------------------------------------------
// Prototipi delle funzioni
//------------------------------------------------------------------------------
#pragma code
void scrivi_numero(int);
void scrivi_dnumero(int);
void scrivi_doppione(int);
void ritardo(int);
void adc_deInit(void);
double valore_x1(void);
double valore_y1(void);
double valore_z1(void);
//------------------------------------------------------------------------------
// Funzioni
//------------------------------------------------------------------------------
#pragma code
//------------------------------------------------------------------------------
// De-inizializza l' ADC
void adc_deInit(void)
{
ADCON0 = 0;
ADCON1 = 0;
IPR1bits.ADIP = 0; // Bit di priorità interrupt ADC
PIE1bits.ADIE = 0; // Interrupt disabilitta
PIR1bits.ADIF = 0; // Flag interrupt azzerato
}
//------------------------------------------------------------------------------
// De-inizializza il timer 2 e lo porta nello stato in cui si trovava
// subito dopo il RESET
void timer2_deInit(void)
{
T2CON = 0; // Resetta il timer 2 control register
TMR2 = 0; // Azzera il contatore interno
PR2 = 0; // Azzera il registro comparatore
PIE1bits.TMR2IE = 0; // Disabilita l' interrupt
IPR1bits.TMR2IP = 0; // Resetta il bit di priorità dell' interrupt
PIR1bits.TMR2IF = 0; // Azzera il flag di interrupt
}
//------------------------------------------------------------------------------
// MAIN FUNCTION
//------------------------------------------------------------------------------
void main(void)
{
// Fa partire il PLL.
// Anche se viene selezionato tramite i bit di configurazione
// il suo funzionamento non è automatico. Ha bisogno di un comando.
OSCTUNEbits.PLLEN = 1;
// Attende abbastanza tempo per far stabilizzare il PLL
Delay1KTCYx(100);
// -------- Inizializzazione delle periferiche --------
// De-inizializza il timer2. Non sarebbe necessario perché il micro esce
// allo stato di RESET ma è comunque buona pratica de-inizializzare sempre
// le periferiche per non tralasciare nessun bit.
timer2_deInit();
// Inizializza il timer 2 per interrupt ogni millisecondo.
// prescaler divide per 16
T2CONbits.T2CKPS = 2;
// Postscaler divide per 5
T2CONbits.T2OUTPS = 4;
// Imposta il valore comparatore a 150
PR2 = 150;
// Imposta l' interrupt del Timer 2 a priorita' bassa
IPR1bits.TMR2IP = 0;
// abilita interrupt del timer
PIE1bits.TMR2IE = 1;
// Inizializza tutti i pin come digitali
ANCON0 = 0xFF;
ANCON1 = 0x1F;
// Inizializza il pin AN7 (RE2). AN6,AN5 come ingresso analogico
ANCON0bits.PCFG7 = 0; // 12/08/2013 corretto BUG segnalato da c1b8
ANCON0bits.PCFG6 = 0;
ANCON0bits.PCFG5 = 0;
// De-inizializza l' ADC
adc_deInit();
// Seleziona Vref positiva Vdd
ADCON0bits.VCFG0 = 0;
// Seleziona Vref negativa Vss
ADCON0bits.VCFG1 = 0;
// Seleziona il tempo di conversione 20TAD
ADCON1bits.ACQT = 7;
// Clock di conversione FOSC/64
ADCON1bits.ADCS = 6;
// Formato del risultato allineato a destra
ADCON1bits.ADFM = 1;
// -------- Selezione ed abilitazione delle interrupt --------
// Ora che si sono inizializzate tutte le periferiche si possono abilitare
// Oppurtunamente le interrupt
// abilita le interrupt a bassa priorita'
RCONbits.IPEN = 1;
// abilta tutte le interrupt a priorità bassa
INTCONbits.GIEL = 1;
// Abilita tutte le interrupt in generale
INTCONbits.GIEH = 1;
// -------- Attivazione delle periferiche --------
// Accensione del timer
T2CONbits.TMR2ON = 1;
// Accensione ADC
ADCON0bits.ADON = 1;
//Dichiaro i pin digitali con Input/Output
TRISB = 0x00;
TRISD = 0x00;
TRISC = 0x00;
//Inizializzo i piedini digitali del MCU
LATB = 0xFF;
LATD = 0xFF;
LATC = 0x00;
// -------- Ciclo infinito di funzionamento --------
for(;;)
{
double y, x;
//acquisisco i valori!!!!!!!
//scrivi_doppione(int) mostra il valore sui due display a 7 segmenti. Moltiplico per 10
//per liberarmi della virgola. Per leggere la x scrivo la x e ricarico il programma......
y = valore_y1()*3.27/1024.00;
x = valore_x1()*3.27/1024.00;
scrivi_doppione(10.00*y);
//funzioni per decidere quale motore attivare ed in quale senso farlo girare
if((10.00*y)>19){LATCbits.LATC0 = 0; LATCbits.LATC1 = 1;}
if((10.00*y)<15){LATCbits.LATC0 = 1; LATCbits.LATC1 = 0;}
if(((10.00*y)<=19)&&((10.00*y)>=15)){LATCbits.LATC0 = 0; LATCbits.LATC1 = 0;}
if((10.00*x)>17){LATCbits.LATC2 = 1; LATCbits.LATC6 = 0;}
if((10.00*x)<13){LATCbits.LATC2 = 0; LATCbits.LATC6 = 1;}
if(((10.00*x)<=17)&&((10.00*x)>=13)){LATCbits.LATC2 = 0; LATCbits.LATC6 = 0;}
}//Chiudo il for(;;)
}
//x1 collegato ad RE2
//y2 collegato ad RE1
//z1 collegato ad RE0
double valore_x1(void){
int i;
int accumulatore;
for(i=0;i<10;i++)
{
sincronismo = 1;
while(sincronismo);
// Calibrazione ADC
ADCON1bits.ADCAL = 1;
ADCON0bits.GO = 1;
while(ADCON0bits.GO);
ADCON1bits.ADCAL = 0;
// Seleziona l' ingresso da misurare
ADCON0bits.CHS = 7;
// Fa partire la conversione 45 us.
ADCON0bits.GO = 1;
// Aspetta la fine della conversione
while(ADCON0bits.GO);
// Legge il valore convertito
accumulatore += ADRES;
}
ADRES = 0;
return (accumulatore/10);
}
double valore_y1(void){
int i;
int accumulatore;
for(i=0;i<10;i++)
{
sincronismo = 1;
while(sincronismo);
// Calibrazione ADC
ADCON1bits.ADCAL = 1;
ADCON0bits.GO = 1;
while(ADCON0bits.GO);
ADCON1bits.ADCAL = 0;
// Seleziona l' ingresso da misurare
ADCON0bits.CHS = 6;
// Fa partire la conversione 45 us.
ADCON0bits.GO = 1;
// Aspetta la fine della conversione
while(ADCON0bits.GO);
// Legge il valore convertito
accumulatore += ADRES;
}
ADRES = 0;
return (accumulatore/10);
}
double valore_z1(void){
int i;
int accumulatore;
for(i=0;i<10;i++)
{
sincronismo = 1;
while(sincronismo);
// Calibrazione ADC
ADCON1bits.ADCAL = 1;
ADCON0bits.GO = 1;
while(ADCON0bits.GO);
ADCON1bits.ADCAL = 0;
// Seleziona l' ingresso da misurare
ADCON0bits.CHS = 5;
// Fa partire la conversione 45 us.
ADCON0bits.GO = 1;
// Aspetta la fine della conversione
while(ADCON0bits.GO);
// Legge il valore convertito
accumulatore += ADRES;
}
return (accumulatore/10);
}
void ritardo(int a)
{
timer_delay = a;
while(timer_delay);
}
void clear(void)
{
LATB = 0xFF;
LATD = 0xFF;
}
void scrivi_doppione(int x)
{
if (x == 0){scrivi_numero(0);scrivi_dnumero(0);}
if (x == 1){scrivi_numero(1);scrivi_dnumero(0);}
if (x == 2){scrivi_numero(2);scrivi_dnumero(0);}
if (x == 3){scrivi_numero(3);scrivi_dnumero(0);}
if (x == 4){scrivi_numero(4);scrivi_dnumero(0);}
if (x == 5){scrivi_numero(5);scrivi_dnumero(0);}
if (x == 6){scrivi_numero(6);scrivi_dnumero(0);}
if (x == 7){scrivi_numero(7);scrivi_dnumero(0);}
if (x == 8){scrivi_numero(8);scrivi_dnumero(0);}
if (x == 9){scrivi_numero(9);scrivi_dnumero(0);}
if (x == 10){scrivi_numero(0);scrivi_dnumero(1);}
if (x == 11){scrivi_numero(1);scrivi_dnumero(1);}
if (x == 12){scrivi_numero(2);scrivi_dnumero(1);}
if (x == 13){scrivi_numero(3);scrivi_dnumero(1);}
if (x == 14){scrivi_numero(4);scrivi_dnumero(1);}
if (x == 15){scrivi_numero(5);scrivi_dnumero(1);}
if (x == 16){scrivi_numero(6);scrivi_dnumero(1);}
if (x == 17){scrivi_numero(7);scrivi_dnumero(1);}
if (x == 18){scrivi_numero(8);scrivi_dnumero(1);}
if (x == 19){scrivi_numero(9);scrivi_dnumero(1);}
if (x == 20){scrivi_numero(0);scrivi_dnumero(2);}
if (x == 21){scrivi_numero(1);scrivi_dnumero(2);}
if (x == 22){scrivi_numero(2);scrivi_dnumero(2);}
if (x == 23){scrivi_numero(3);scrivi_dnumero(2);}
if (x == 24){scrivi_numero(4);scrivi_dnumero(2);}
if (x == 25){scrivi_numero(5);scrivi_dnumero(2);}
if (x == 26){scrivi_numero(6);scrivi_dnumero(2);}
if (x == 27){scrivi_numero(7);scrivi_dnumero(2);}
if (x == 28){scrivi_numero(8);scrivi_dnumero(2);}
if (x == 29){scrivi_numero(9);scrivi_dnumero(2);}
if (x == 30){scrivi_numero(0);scrivi_dnumero(3);}
if (x == 31){scrivi_numero(1);scrivi_dnumero(3);}
if (x == 32){scrivi_numero(2);scrivi_dnumero(3);}
if (x == 33){scrivi_numero(3);scrivi_dnumero(3);}
if (x == 34){scrivi_numero(4);scrivi_dnumero(3);}
if (x == 35){scrivi_numero(5);scrivi_dnumero(3);}
if (x == 36){scrivi_numero(6);scrivi_dnumero(3);}
if (x == 37){scrivi_numero(7);scrivi_dnumero(3);}
if (x == 38){scrivi_numero(8);scrivi_dnumero(3);}
if (x == 39){scrivi_numero(9);scrivi_dnumero(3);}
if (x == 40){scrivi_numero(0);scrivi_dnumero(4);}
if (x == 41){scrivi_numero(1);scrivi_dnumero(4);}
if (x == 42){scrivi_numero(2);scrivi_dnumero(4);}
if (x == 43){scrivi_numero(3);scrivi_dnumero(4);}
if (x == 44){scrivi_numero(4);scrivi_dnumero(4);}
if (x == 45){scrivi_numero(5);scrivi_dnumero(4);}
if (x == 46){scrivi_numero(6);scrivi_dnumero(4);}
if (x == 47){scrivi_numero(7);scrivi_dnumero(4);}
if (x == 48){scrivi_numero(8);scrivi_dnumero(4);}
if (x == 49){scrivi_numero(9);scrivi_dnumero(4);}
if (x == 50){scrivi_numero(0);scrivi_dnumero(5);}
if (x == 51){scrivi_numero(1);scrivi_dnumero(5);}
if (x == 52){scrivi_numero(2);scrivi_dnumero(5);}
if (x == 53){scrivi_numero(3);scrivi_dnumero(5);}
if (x == 54){scrivi_numero(4);scrivi_dnumero(5);}
if (x == 55){scrivi_numero(5);scrivi_dnumero(5);}
if (x == 56){scrivi_numero(6);scrivi_dnumero(5);}
if (x == 57){scrivi_numero(7);scrivi_dnumero(5);}
if (x == 58){scrivi_numero(8);scrivi_dnumero(5);}
if (x == 59){scrivi_numero(9);scrivi_dnumero(5);}
if (x == 60){scrivi_numero(0);scrivi_dnumero(6);}
if (x == 61){scrivi_numero(1);scrivi_dnumero(6);}
if (x == 62){scrivi_numero(2);scrivi_dnumero(6);}
if (x == 63){scrivi_numero(3);scrivi_dnumero(6);}
if (x == 64){scrivi_numero(4);scrivi_dnumero(6);}
if (x == 65){scrivi_numero(5);scrivi_dnumero(6);}
if (x == 66){scrivi_numero(6);scrivi_dnumero(6);}
if (x == 67){scrivi_numero(7);scrivi_dnumero(6);}
if (x == 68){scrivi_numero(8);scrivi_dnumero(6);}
if (x == 69){scrivi_numero(9);scrivi_dnumero(6);}
if (x == 70){scrivi_numero(0);scrivi_dnumero(7);}
if (x == 71){scrivi_numero(1);scrivi_dnumero(7);}
if (x == 72){scrivi_numero(2);scrivi_dnumero(7);}
if (x == 73){scrivi_numero(3);scrivi_dnumero(7);}
if (x == 74){scrivi_numero(4);scrivi_dnumero(7);}
if (x == 75){scrivi_numero(5);scrivi_dnumero(7);}
if (x == 76){scrivi_numero(6);scrivi_dnumero(7);}
if (x == 77){scrivi_numero(7);scrivi_dnumero(7);}
if (x == 78){scrivi_numero(8);scrivi_dnumero(7);}
if (x == 79){scrivi_numero(9);scrivi_dnumero(7);}
if (x == 80){scrivi_numero(0);scrivi_dnumero(8);}
if (x == 81){scrivi_numero(1);scrivi_dnumero(8);}
if (x == 82){scrivi_numero(2);scrivi_dnumero(8);}
if (x == 83){scrivi_numero(3);scrivi_dnumero(8);}
if (x == 84){scrivi_numero(4);scrivi_dnumero(8);}
if (x == 85){scrivi_numero(5);scrivi_dnumero(8);}
if (x == 86){scrivi_numero(6);scrivi_dnumero(8);}
if (x == 87){scrivi_numero(7);scrivi_dnumero(8);}
if (x == 88){scrivi_numero(8);scrivi_dnumero(8);}
if (x == 89){scrivi_numero(9);scrivi_dnumero(8);}
if (x == 90){scrivi_numero(0);scrivi_dnumero(9);}
if (x == 91){scrivi_numero(1);scrivi_dnumero(9);}
if (x == 92){scrivi_numero(2);scrivi_dnumero(9);}
if (x == 93){scrivi_numero(3);scrivi_dnumero(9);}
if (x == 94){scrivi_numero(4);scrivi_dnumero(9);}
if (x == 95){scrivi_numero(5);scrivi_dnumero(9);}
if (x == 96){scrivi_numero(6);scrivi_dnumero(9);}
if (x == 97){scrivi_numero(7);scrivi_dnumero(9);}
if (x == 98){scrivi_numero(8);scrivi_dnumero(9);}
if (x == 99){scrivi_numero(9);scrivi_dnumero(9);}
}
void scrivi_numero(int a){
if(a==0){
LATBbits.LATB0 = 0;
LATBbits.LATB1 = 0;
LATBbits.LATB2 = 0;
LATBbits.LATB3 = 1;
LATBbits.LATB4 = 1;
LATBbits.LATB5 = 0;
LATBbits.LATB6 = 0;
LATBbits.LATB7 = 0;
}
if(a==1){
LATBbits.LATB0 = 0;
LATBbits.LATB1 = 1;
LATBbits.LATB2 = 1;
LATBbits.LATB3 = 1;
LATBbits.LATB4 = 1;
LATBbits.LATB5 = 0;
LATBbits.LATB6 = 1;
LATBbits.LATB7 = 1;
}
if(a==2){
LATBbits.LATB0 = 0;
LATBbits.LATB1 = 0;
LATBbits.LATB2 = 1;
LATBbits.LATB3 = 0;
LATBbits.LATB4 = 1;
LATBbits.LATB5 = 1;
LATBbits.LATB6 = 0;
LATBbits.LATB7 = 0;
}
if(a==3){
LATBbits.LATB0 = 0;
LATBbits.LATB1 = 0;
LATBbits.LATB2 = 1;
LATBbits.LATB3 = 0;
LATBbits.LATB4 = 1;
LATBbits.LATB5 = 0;
LATBbits.LATB6 = 0;
LATBbits.LATB7 = 1;
}
if(a==4){
LATBbits.LATB0 = 0;
LATBbits.LATB1 = 1;
LATBbits.LATB2 = 0;
LATBbits.LATB3 = 0;
LATBbits.LATB4 = 1;
LATBbits.LATB5 = 0;
LATBbits.LATB6 = 1;
LATBbits.LATB7 = 1;
}
if(a==5){
LATBbits.LATB0 = 1;
LATBbits.LATB1 = 0;
LATBbits.LATB2 = 0;
LATBbits.LATB3 = 0;
LATBbits.LATB4 = 1;
LATBbits.LATB5 = 0;
LATBbits.LATB6 = 0;
LATBbits.LATB7 = 1;
}
if(a==6){
LATBbits.LATB0 = 1;
LATBbits.LATB1 = 0;
LATBbits.LATB2 = 0;
LATBbits.LATB3 = 0;
LATBbits.LATB4 = 1;
LATBbits.LATB5 = 0;
LATBbits.LATB6 = 0;
LATBbits.LATB7 = 0;
}
if(a==7){
LATBbits.LATB0 = 0;
LATBbits.LATB1 = 0;
LATBbits.LATB2 = 1;
LATBbits.LATB3 = 1;
LATBbits.LATB4 = 1;
LATBbits.LATB5 = 0;
LATBbits.LATB6 = 1;
LATBbits.LATB7 = 1;
}
if(a==8){
LATBbits.LATB0 = 0;
LATBbits.LATB1 = 0;
LATBbits.LATB2 = 0;
LATBbits.LATB3 = 0;
LATBbits.LATB4 = 1;
LATBbits.LATB5 = 0;
LATBbits.LATB6 = 0;
LATBbits.LATB7 = 0;
}
if(a==9){
LATBbits.LATB0 = 0;
LATBbits.LATB1 = 0;
LATBbits.LATB2 = 0;
LATBbits.LATB3 = 0;
LATBbits.LATB4 = 1;
LATBbits.LATB5 = 0;
LATBbits.LATB6 = 0;
LATBbits.LATB7 = 1;
}
}
void scrivi_dnumero(int a){
if(a==0){
LATDbits.LATD0 = 0;
LATDbits.LATD1 = 0;
LATDbits.LATD2 = 0;
LATDbits.LATD3 = 1;
LATDbits.LATD4 = 1;
LATDbits.LATD5 = 0;
LATDbits.LATD6 = 0;
LATDbits.LATD7 = 0;
}
if(a==1){
LATDbits.LATD0 = 0;
LATDbits.LATD1 = 1;
LATDbits.LATD2 = 1;
LATDbits.LATD3 = 1;
LATDbits.LATD4 = 1;
LATDbits.LATD5 = 0;
LATDbits.LATD6 = 1;
LATDbits.LATD7 = 1;
}
if(a==2){
LATDbits.LATD0 = 0;
LATDbits.LATD1 = 0;
LATDbits.LATD2 = 1;
LATDbits.LATD3 = 0;
LATDbits.LATD4 = 1;
LATDbits.LATD5 = 1;
LATDbits.LATD6 = 0;
LATDbits.LATD7 = 0;
}
if(a==3){
LATDbits.LATD0 = 0;
LATDbits.LATD1 = 0;
LATDbits.LATD2 = 1;
LATDbits.LATD3 = 0;
LATDbits.LATD4 = 1;
LATDbits.LATD5 = 0;
LATDbits.LATD6 = 0;
LATDbits.LATD7 = 1;
}
if(a==4){
LATDbits.LATD0 = 0;
LATDbits.LATD1 = 1;
LATDbits.LATD2 = 0;
LATDbits.LATD3 = 0;
LATDbits.LATD4 = 1;
LATDbits.LATD5 = 0;
LATDbits.LATD6 = 1;
LATDbits.LATD7 = 1;
}
if(a==5){
LATDbits.LATD0 = 1;
LATDbits.LATD1 = 0;
LATDbits.LATD2 = 0;
LATDbits.LATD3 = 0;
LATDbits.LATD4 = 1;
LATDbits.LATD5 = 0;
LATDbits.LATD6 = 0;
LATDbits.LATD7 = 1;
}
if(a==6){
LATDbits.LATD0 = 1;
LATDbits.LATD1 = 0;
LATDbits.LATD2 = 0;
LATDbits.LATD3 = 0;
LATDbits.LATD4 = 1;
LATDbits.LATD5 = 0;
LATDbits.LATD6 = 0;
LATDbits.LATD7 = 0;
}
if(a==7){
LATDbits.LATD0 = 0;
LATDbits.LATD1 = 0;
LATDbits.LATD2 = 1;
LATDbits.LATD3 = 1;
LATDbits.LATD4 = 1;
LATDbits.LATD5 = 0;
LATDbits.LATD6 = 1;
LATDbits.LATD7 = 1;
}
if(a==8){
LATDbits.LATD0 = 0;
LATDbits.LATD1 = 0;
LATDbits.LATD2 = 0;
LATDbits.LATD3 = 0;
LATDbits.LATD4 = 1;
LATDbits.LATD5 = 0;
LATDbits.LATD6 = 0;
LATDbits.LATD7 = 0;
}
if(a==9){
LATDbits.LATD0 = 0;
LATDbits.LATD1 = 0;
LATDbits.LATD2 = 0;
LATDbits.LATD3 = 0;
LATDbits.LATD4 = 1;
LATDbits.LATD5 = 0;
LATDbits.LATD6 = 0;
LATDbits.LATD7 = 1;
}
}

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)


