He estado tratando de usar los pines del puerto C en un atmega644pv como gpio, y he tenido algunos problemas. Hasta donde puedo discernir, parece que los cuatro pines centrales (PORTC 2,3,4,5) están atascados en un estado de alta impedancia (usamos un destornillador para cortarlos en los cuatro pines externos, y los leds mencionados más adelante se comportaron como deseado). cavando un poco parece que estos son los pines JTAG, pero deshabilité JTAG a través de los bits de fusible. el código de abajo (debería) hacer que los leds adjuntos se iluminen secuencialmente, como una especie de jinete de cylon / caballero, pero solo va en una dirección, pero cuando lo ejecuto, los cuatro leds del medio solo se iluminan levemente, mientras que los externos tienen un brillo máximo . Para referencia, los leds están unidos entre PORTA y PORTC, y tienen una serie de resistencias con ellos en el lado PORTA. No puedo usar solo PORTA y tierra, porque necesito invertir la polarización de los leds en mi código real y luego controlar su voltaje.
-U lfuse: w: 0x62: m -U hfuse: w: 0xd9: m -U efuse: w: 0xff: m
#include <avr/io.h>
#include <util/delay.h>
int setup(void)
{
DDRD = 0x7F;
MCUCR |= (1 << PUD);
MCUCR |= (1<<JTD);
PORTD=0x00;
DDRC=0xFF;
DDRA=0xFF;
}
int main(void)
{
DDRA=0xFF;
DDRC=0xFF;
PORTA=0x00;
PORTC=0xFF;
while(1){
if (PIND&0x80){
PORTC=0xFF;
PORTA=(0b11111110);
_delay_ms(10);
PORTA=0b11111101;
_delay_ms(10);
PORTA=~0b00000100;
_delay_ms(10);
PORTA=~0b00001000;
_delay_ms(10);
PORTA=~0b00010000;
_delay_ms(10);
PORTA=~0b00100000;
_delay_ms(10);
PORTA=~0b01000000;
_delay_ms(10);
PORTA=~0b10000000;
_delay_ms(10);
PORTA=~0b00000000;
}
else{
_delay_ms(10);
}
}
return 0;
}
muchas gracias!
EDITAR: se olvidó de llamar a setup () al principio de main () = (
se requería más café