Hola
Estoy experimentado problemas con los pines analógicos del portenta H7,
Actualmente tengo montado un portenta H7, con una Portenta mid carrier y un modulo 4G.
Cuando configuro los pines analógicos como salida y por ejemplo pongo en HIGH el pin A2, se pone en HIGH también el pin A4. Cuando pongo en HIGH el pin A3, se pone en HIGH también el pin A5.
En la documentación de la portenta mid carrier el pin A2 se llama PC2_C y el pin A4 se puede llamar como PC2. Para el pin A3 - PC3_C y para el A5 - PC3.
Pongo un código que me activa varios pines y enciende el led de la placa. Es una secuencia que ha de seguir para activarme 2 tb6612 y abrir o cerrar unas electroválvulas de 9v latch.
En el código original no había delay de 10, pero se lo he puesto para ver si había algún cambio.
````const int BIN2 = A4; // Direction A4
const int BIN1 = A3; // Direction A3
const int STBY = A2; // standby A2
const int AIN1 = A1; // Direction A1
const int AIN2 = A0; // Direction A0
const int STBY2 = A5; // standby2 A5
void setup() {
pinMode(LEDR, OUTPUT);
digitalWrite(LEDR, HIGH); // turn the LED off after being turned on by pinMode()
pinMode(LEDG, OUTPUT);
digitalWrite(LEDG, HIGH); // turn the LED off after being turned on by pinMode()
pinMode(LEDB, OUTPUT);
digitalWrite(LEDB, HIGH); // turn the LED off after being turned on by pinMode()
pinMode(BIN2, OUTPUT);
pinMode(BIN1, OUTPUT);
pinMode(STBY, OUTPUT);
pinMode(AIN1, OUTPUT);
pinMode(AIN2, OUTPUT);
pinMode(STBY2, OUTPUT);
}
void loop() {
delay(2000);
ActivarValvula1();
ledSequence();
delay(2000);
CerrarValvula1();
ledSequence3();
delay(2000);
ActivarValvula2();
ledSequence();
delay(2000);
CerrarValvula2();
ledSequence3();
delay(2000);
ActivarValvula3();
ledSequence();
delay(2000);
CerrarValvula3();
ledSequence3();
delay(2000);
ActivarValvula4();
ledSequence();
delay(2000);
CerrarValvula4();
ledSequence3();
delay(2000);
}
void ActivarValvula1 () {
digitalWrite (AIN1, LOW);
delay(10);
digitalWrite (AIN2, HIGH);
delay(10);
digitalWrite (STBY, HIGH);
delay (400);
digitalWrite (STBY, LOW );
delay(10);
digitalWrite (AIN1, LOW);
delay(10);
digitalWrite (AIN2, LOW);
Serial.println( "Riego Activado 1");
}
void CerrarValvula1 (){
digitalWrite (AIN1, HIGH);
delay(10);
digitalWrite (AIN2, LOW);
delay(10);
digitalWrite (STBY, HIGH);
delay (400);
digitalWrite (STBY, LOW);
delay(10);
digitalWrite (AIN1, LOW);
delay(10);
digitalWrite (AIN2, LOW);
Serial.println( "Riego Desactivado 1");
}
void ActivarValvula2 () {
digitalWrite (BIN1, LOW);
delay(10);
digitalWrite (BIN2, HIGH);
delay(10);
digitalWrite (STBY, HIGH);
delay (400);
digitalWrite (STBY, LOW );
delay(10);
digitalWrite (BIN1, LOW);
delay(10);
digitalWrite (BIN2, LOW);
Serial.println ("Riego Activado 2");
}
void CerrarValvula2 (){
digitalWrite (BIN1, HIGH);
delay(10);
digitalWrite (BIN2, LOW);
delay(10);
digitalWrite (STBY, HIGH);
delay (400);
digitalWrite (STBY, LOW);
delay(10);
digitalWrite (BIN1, LOW);
delay(10);
digitalWrite (BIN2, LOW);
Serial.println ("Riego Desactivado 2");
}
void ActivarValvula3 () {
digitalWrite (AIN1, LOW);
delay(10);
digitalWrite (AIN2, HIGH);
delay(10);
digitalWrite (STBY2, HIGH);
delay (400);
digitalWrite (STBY2, LOW );
delay(10);
digitalWrite (AIN1, LOW);
delay(10);
digitalWrite (AIN2, LOW);
Serial.println ("Riego Activado Semillero");
}
void CerrarValvula3 (){
digitalWrite (AIN1, HIGH);
delay(10);
digitalWrite (AIN2, LOW);
delay(10);
digitalWrite (STBY2, HIGH);
delay (400);
digitalWrite (STBY2, LOW);
delay(10);
digitalWrite (AIN1, LOW);
delay(10);
digitalWrite (AIN2, LOW);
Serial.println ("Riego Desactivado Semillero");
}
void ActivarValvula4 () {
digitalWrite (BIN1, LOW);
delay(10);
digitalWrite (BIN2, HIGH);
delay(10);
digitalWrite (STBY2, HIGH);
delay (400);
digitalWrite (STBY2, LOW );
delay(10);
digitalWrite (BIN1, LOW);
delay(10);
digitalWrite (BIN2, LOW);
Serial.println ("Riego Activado 4");
}
void CerrarValvula4 (){
digitalWrite (BIN1, HIGH);
delay(10);
digitalWrite (BIN2, LOW);
delay(10);
digitalWrite (STBY2, HIGH);
delay (400);
digitalWrite (STBY2, LOW);
delay(10);
digitalWrite (BIN1, LOW);
delay(10);
digitalWrite (BIN2, LOW);
Serial.println ("Riego Desactivado 4");
}
void ledSequence() {
// Control de LEDs
digitalWrite(LEDB, LOW); // Encender LED azul
delay(500); // Esperar medio segundo
digitalWrite(LEDB, HIGH); // Apagar LED azul
delay(500); // Esperar medio segundo
}
void ledSequence2() {
// Control de LEDs
digitalWrite(LEDR, LOW); // Encender LED rojo
delay(1000); // Esperar medio segundo
digitalWrite(LEDR, HIGH); // Apagar LED rojo
delay(1000); // Esperar medio segundo
}
void ledSequence3() {
// Control de LEDs
digitalWrite(LEDG, LOW); // Encender LED verde
delay(10); // Esperar medio segundo
digitalWrite(LEDG, HIGH); // Apagar LED verde
delay(10); // Esperar medio segundo
}
Según la hoja de datos del STM32H747 (H7 para los amigos) a partir de la pág. 61, los pines x_C son solamente entradas analógicas (analog-only inputs) pero no es lo que señala el pinout del Portenta que los marca como digitales/analógicos.
La lógica indica que hay que confiar en la información que entrega el fabricante del micro por lo que la información de Arduino sería incorrecta.
Si estoy en lo correcto, los pines A0, A1, A2 y A3 no se podrían setear como salidas.
Estoy revisando la documentación del STM32H747 y parece que tiene bastante sentido lo que indicas.
Voy a intentar usar algún pin PWM que me queda disponible para hacer funcionar los tb6612.
Gracias.
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.