Estoy trabajando con un ATTINY26 (L) aprendiendo sobre las interrupciones, y descubrí un problema.
Estoy obteniendo un voltaje de salida diferente en PORTA
(la mitad) que en PORTB
. Para simplificar las cosas, hice un programa para encender un solo LED en un pin determinado. He probado hasta ahora en varios pines de ambos puertos.
EnPORTA
,simidopinatierrasincarga,obtengo5V.SiconectoelLED(3\$V_f\$)yunaresistenciade100Ω,elvoltajecaea2.5V,yelLEDestáoscuro(2.5VatravésdelLEDy6mVatravésdelaresistencia).
EnPORTB
,elvoltajepermanece5V(3VatravésdelLEDy2Vatravésdelaresistencia).
Código:
intmain(){DDRA=0xFF;DDRB=0xFF;while(1){PORTA=(1<<PA6);//Halfvoltage?PORTB=(1<<PB6);//OKmilli_delay(100);PORTA=(0<<PA6);PORTB=(0<<PB6);milli_delay(100);}}voidmilli_delay(intd){for(inti=0;i<d;i++)_delay_ms(1);}
¿Tengounmicrocontroladordañadoohepasadoporaltoalgo?
Actualizar:
Cambiéelmicrocontroladorporunoidénticoyobtuveelmismoresultado.Creoqueespocoprobablequedosesténdañadosdelamismamanera.
Actualización2:
AlgunoshansolicitadoelcódigoHEXcompilado:(Enlaceahoraeliminado)
Actualización3:
@JippietuvolaamabilidaddeverificarelcódigoELF(descompilado)yviouncambioextrañodePORTA
denuevoenlaentrada,inmediatamentedespuésdeconfigurarloparalasalida.¿Quéda?
Elcódigoquepeguéarribanoestácompleto.Hayunapequeñalíneadecódigoadicionalquedeberíahabersecomentadoopegadoenestapregunta:
DDRA=(0<<PA7);//inputonPA7
ElPA7estabadestinadoaleeruninterruptorcomopartedemipruebadeinterrupcióndecambiodepin.Penséquelalíneahabíasidocomentada,peronofueasí.Y,sitefijasbien,descubrirásunproblema.
Deberíaser:
DDRA|=(0<<PA7);
ElintentodeestablecerelpinPA7en0soloparalaentradadebehacerseconunoperadorOR-EQUALS(|=
),nosoloIGUALDAD(=
).Comoresultado,todoelPORTA
seestableciódenuevoenlaentrada.
¿Lalecciónaquí?Unpersonajedesinglearruinómásdeundíaenterodeaprendizajeyexperimentación.Unasolalíneadecódigoomitidaenlapregunta(onocomentadaadecuadamenteparalaprueba)causódoloresdecabeza.
Siempresoymipeorenemigocuandosetratadesolucionarproblemas.Nofueunchipdefectuoso,unerrordecompilaciónoalgunaconfiguraciónaccidental.Totalerrordenovatoalnoafondorevisarmipropiocódigo.
Algunasfotos: