ho realizzato un circuitino cosi fatto: 8 fotodiodi collegati ad un micro msp430f2274 a sua volta collegato a 8 led. L'obiettivo è accendere i led confrontando la tensione su ogni canale del micro con una soglia fissata. Ho quindi realizzato un programma in c e programmato la scheda con il software IAR Embedded Workbench tramite USB ez430f2013. Il problema è che qualsiasi modifica faccia mi si accendono tutti iled simultanemante (anche provando ad accenderne solo 1 con il semplice programma 'Hello World', oppure tentando di spegnerne alcuni e altri no). Non so se c'è qualcosa che sbaglio nella selezione delle porte o qualcos'altro nel codice, oppure se può essere un errore nelle impostazioni del software.
Vi posto il codice:
- Codice: Seleziona tutto
#include "msp430f2274.h"
void main( void )
{
P4DIR=0x00; // reset delle porte
P2DIR=0x00;
P3DIR=0x00;
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
ADC10CTL0 = ADC10SHT_2 + ADC10ON + ADC10IE; // ADC10 ON, interrupt enable
ADC10AE0=0xFF; // seleziona A0/1/2/3/4/5/6/7 come ingressi dell'ADC
P4DIR |=0xFF; // imposta P4.0/1/2/3/4/5/6/7 come uscite
for (;;)
{
ADC10CTL1 = INCH_6; // seleziona il canale da campionare (A.6----->P4.0)
ADC10CTL0 |= ENC + ADC10SC; // campiona e inizia la conversione
__bis_SR_register(CPUOFF + GIE); //LPM0 , ADC10_ISR will force exit
ADC10MEM = INCH_6; // copia nel registro ADC10MEM il valore sul canale A.6
float VAL1 = ADC10MEM; // copia in VAL1 il contenuto del registro
ADC10CTL1 = INCH_7;
ADC10CTL0 |= ENC + ADC10SC;
__bis_SR_register(CPUOFF + GIE);
ADC10MEM = INCH_7;
float VAL2 = ADC10MEM;
ADC10CTL1 = INCH_5;
ADC10CTL0 |= ENC + ADC10SC;
__bis_SR_register(CPUOFF + GIE);
ADC10MEM = INCH_5;
float VAL3 = ADC10MEM;
ADC10CTL1 = INCH_2;
ADC10CTL0 |= ENC + ADC10SC;
__bis_SR_register(CPUOFF + GIE);
ADC10MEM = INCH_2;
float VAL4 = ADC10MEM;
ADC10CTL1 = INCH_1;
ADC10CTL0 |= ENC + ADC10SC;
__bis_SR_register(CPUOFF + GIE);
ADC10MEM = INCH_1;
float VAL5 = ADC10MEM;
ADC10CTL1 = INCH_0;
ADC10CTL0 |= ENC + ADC10SC;
__bis_SR_register(CPUOFF + GIE);
ADC10MEM = INCH_0;
float VAL6 = ADC10MEM;
ADC10CTL1 = INCH_3;
ADC10CTL0 |= ENC + ADC10SC;
__bis_SR_register(CPUOFF + GIE);
ADC10MEM = INCH_3;
float VAL7 = ADC10MEM;
ADC10CTL1 = INCH_4;
ADC10CTL0 |= ENC + ADC10SC;
__bis_SR_register(CPUOFF + GIE);
ADC10MEM = INCH_4;
float VAL8 = ADC10MEM;
ADC10CTL0 &= ENC; // ferma il campionamento
if (VAL1 < 0x1FF)
P4OUT &= ~0x01;
else
P4OUT ^= 0x01;
if (VAL2 < 0x1FF)
P4OUT &= ~0x02;
else
P4OUT ^= 0x02;
if (VAL3 < 0x1FF)
P4OUT &= ~0x04;
else
P4OUT ^= 0x04;
if (VAL4 < 0x1FF)
P4OUT &= ~0x08;
else
P4OUT ^= 0x08;
if (VAL5 < 0x1FF)
P4OUT &= ~0x10;
else
P4OUT ^= 0x10;
if (VAL6 < 0x1FF)
P4OUT &= ~0x20;
else
P4OUT ^= 0x20;
if (VAL7 < 0x1FF)
P4OUT &= ~0x40;
else
P4OUT ^= 0x40;
if (VAL8 < 0x1FF)
P4OUT &= ~0x80;
else
P4OUT ^= 0x80;
}
#pragma vector=ADC10_VECTOR
__interrupt void ADC10_ISR(void);
{
__bic_SR_register_on_exit(CPUOFF);
}
}
Spero possiate darmi una mano...grazie in anticipo

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)