vpreatoni/triacd

No funciona en Raspberry Pi OS 2023

Opened this issue · 9 comments

Al parecer no es compatible con esta versión:

Release date: October 10th 2023
System: 64-bit
Kernel version: 6.1
Debian version: 12 (bookworm)

el error se da al instalar modules

admin@raspberrypi:~/Documents/triacd/modules $ make
make -C "/lib/modules/6.1.0-rpi4-rpi-v8/build" M=/home/admin/Documents/triacd/modules modules
make[1]: Entering directory '/usr/src/linux-headers-6.1.0-rpi4-rpi-v8'
CC [M] /home/admin/Documents/triacd/modules/aclinedrv.o
In file included from /home/admin/Documents/triacd/modules/aclinedrv.c:19:
/home/admin/Documents/triacd/modules/aclinedrv.h:94:12: error: static declaration of ‘int_pow’ follows non-static declaration
94 | static u64 int_pow(u64 base, unsigned int exp);
| ^~~~~~~
In file included from /usr/src/linux-headers-6.1.0-rpi4-common-rpi/include/linux/math64.h:6,
from /usr/src/linux-headers-6.1.0-rpi4-common-rpi/include/linux/time.h:6,
from /usr/src/linux-headers-6.1.0-rpi4-common-rpi/arch/arm64/include/asm/stat.h:12,
from /usr/src/linux-headers-6.1.0-rpi4-common-rpi/include/linux/stat.h:6,
from /usr/src/linux-headers-6.1.0-rpi4-common-rpi/include/linux/module.h:13,
from /home/admin/Documents/triacd/modules/aclinedrv.h:5:
/usr/src/linux-headers-6.1.0-rpi4-common-rpi/include/linux/math.h:177:5: note: previous declaration of ‘int_pow’ with type ‘u64(u64, unsigned int)’ {aka ‘long long unsigned int(long long unsigned int, unsigned int)’}
177 | u64 int_pow(u64 base, unsigned int exp);
| ^~~~~~~
/home/admin/Documents/triacd/modules/aclinedrv.c: In function ‘acline_irq_calibrate’:
/home/admin/Documents/triacd/modules/aclinedrv.c:193:36: warning: cast between incompatible function types from ‘irqreturn_t (* (*)(unsigned int, void *, struct pt_regs ))(int, void )’ {aka ‘enum irqreturn ( ()(unsigned int, void *, struct pt_regs *))(int, void )’} to ‘irqreturn_t ()(int, void )’ {aka ‘enum irqreturn ()(int, void )’} [-Wcast-function-type]
193 | if (request_irq(irqNumber, (irq_handler_t)acline_calibration_irq_handler, IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, "calibrateAC", (void )(acline_calibration_irq_handler)))
| ^
/home/admin/Documents/triacd/modules/aclinedrv.c: In function ‘acline_irq_start’:
/home/admin/Documents/triacd/modules/aclinedrv.c:271:36: warning: cast between incompatible function types from ‘irqreturn_t (
(
)(unsigned int, void *, struct pt_regs ))(int, void )’ {aka ‘enum irqreturn ( ()(unsigned int, void *, struct pt_regs *))(int, void )’} to ‘irqreturn_t ()(int, void )’ {aka ‘enum irqreturn ()(int, void *)’} [-Wcast-function-type]
271 | if (request_irq(irqNumber, (irq_handler_t)acline_gpio_irq_handler, IRQF_TRIGGER_RISING | IRQF_SHARED, "lineAC", (void *)(acline_gpio_irq_handler))) {
| ^
make[2]: *** [/usr/src/linux-headers-6.1.0-rpi4-common-rpi/scripts/Makefile.build:255: /home/admin/Documents/triacd/modules/aclinedrv.o] Error 1
make[1]: *** [/usr/src/linux-headers-6.1.0-rpi4-common-rpi/Makefile:2039: /home/admin/Documents/triacd/modules] Error 2
make[1]: Leaving directory '/usr/src/linux-headers-6.1.0-rpi4-rpi-v8'
make: *** [Makefile:18: all] Error 2

Hola!
No tengo una RPi 64bit como para probar, pero si me ayudas podemos resolverlo.
Te das maña editando el código?

Al parecer el nuevo Kernel de Linux para ARM64 incluye una función int_pow() que se llama igual a una función que yo definí en el código.

Tenemos 2 opciones:

  • quitar la función que definí y probar la que incluye el nuevo kernel
  • renombrar mi función.

Avisame si podes, y te voy guiando como hacerlo.

Hola!
Gracias por responder!
Le cambie el nombre a la funcion int_pow pow en todos los archivos a int_pow_b y el make salió sin errores, algunos warning si da, pero no errores, tengo conectada la energía pero al hacer dmesg me dice esto:

[ 16.349139] AC LINE: unstable frequency
[ 16.349177] AC LINE: ready
[ 16.363681] TRIAC1: GPIO 06
[ 16.363841] TRIAC1: ready
[ 16.378573] TRIAC2: GPIO 13
[ 16.378743] TRIAC2: ready
[ 16.391479] TRIAC3: GPIO 19
[ 16.391653] TRIAC3: ready
[ 16.405369] TRIAC4: GPIO 26
[ 16.405542] TRIAC4: ready

¿Que raspberry me recomiendas para usar? Así armo el mismo entorno, el objetivo es automatizar la dimmerizacion de luminarias.

Hola,
excelente que funcionó. Yo lo desarrollé con una RPi 2B, pero tiene que andarte sin problema con cualquier otra.

El driver compiló bien pq te esta reconociendo los puertos.

No te esta reconociendo la frecuencia de entrada. Probá lo siguiente:

  • reinicia la RPi pero manteniendo la linea de 220vac conectada.

  • Tirá el comandotriacd -c1 -p180 para ver si enciende el canal. Si no pudo detectar la frecuencia de entrada, el triac enciende en modo on/off, sin control de fase. Pero al menos nos sirve para ir descartando errores.

Perfecto,
eso me funciono, pero algo parece estar mal, cuando pongo el comando no enciende la luz, pero si enciende cuando toco con un destornillador alguno de los terminales, lo mismo para apagar, si no toco no funciona. Por otro lado no logro dimmerizar.

si encendió, solo faltaría lo de dimmer, calculo esta asociado a no poder testear la entrada

voy a probar volver a usar la funcion int_pow que tenias, yo la saque para que funcione con la del sistema que era una de las opciones, reinstalo raspbian y pruebo

reinstale, probe con la función original int_pow con nombre cambiado... funciona pero sigue con esto:
AC LINE: unstable frequency

funciona como un relé pero no la función de dimmer

calculo que el problema esta en el codigo de https://github.com/vpreatoni/triacd/blob/master/modules/aclinedrv.c que es el que tira en consola los warning que escribi al principio

Tenes forma de medir señal cuadrada (osciloscopio, analizador, etc) en el pin GPIO 5 de la RPi?. Ahi deberías tener una señal cuadrada de 50Hz con nivel de tensión 0-3.3V.

Quiero ver si no es un problema de hardware... La placa salió probada, pero en el viaje pudo haber algun problema.

Pinout: https://www.raspberrypi-spy.co.uk/wp-content/uploads/2012/06/Raspberry-Pi-GPIO-Layout-Model-B-Plus-rotated-2700x900.png