Hola, estimados
Recien me puse (algo tarde) a ver un poco el tema de la programacion de los AVR, como era de esperarse tenia ganas de empezar con el GCC pero escribir tantas cosas se volvia lento y agarre viaje con el bascom.
Mi primer emprendimiento tenia que ser usando chatarra (una placa con un ATMEGA48) y dos 74hc597 para leer las entradas.
Cuando codifique las primeras lineas lo puse a simular en el ISIS y funciono. Pero en la practica cada octeto salia desplazado y en mi caso los bytes de la word invertidos a como yo los queria leer. Rehice varias veces el codigo, hasta que me decidi y use la funcion integrada pero el resultado fue el mismo.
Ahora para paliar este problema(porque me re-aburrio y saco caspa no encontrar una solucion logica), use el siguiente codigo
Sub Getinputs(wsto As Word , Byval I As Byte)
Set Platch : Waitms 2 : Reset Platch
Reset Pload : Waitms 2 : Set Pload
Shiftin Pdata , Pclock , Wsto , 2 , I
A = Low(wsto) : B = High(wsto)
C = A.7 : Shift A , Left , 1 : A.0 = C 'No se sabe porque se necesita este arregl
C = B.7 : Shift B , Left , 1 : B.0 = C 'El fallo se da en ambos sentidos
Wsto = A : Shift Wsto , Left , 8 : Wsto = Wsto + B 'Tanto al usar la funcion como codigo propio
End Sub
Con este codigo funcionan todos los bits correctamente, pero son muchas vueltas. Pense que podia haber algun problema con el circuito pero me paso lo mismo con las salidas solo que desplazado para el otro lado. Probe con MSB first/LSB, flancos de clock, etc... con similar resultado. Son 2 HC597 encadenados con Q->DS
En otro orden de cosas este encadenamiento no funciona en el ISIS y probe con los dos modelos de IC que tenia.
Seria interesante saber porque me sucede esto, en los ejemplos de la web todo es sencillo y no se necesita rotar.
Aqui esta el codigo tambien que me veo forzado a usar para las salidas, sino hace disparates.
Sub Setoutputs(wsto As Word , Byval I As Byte)
A = Low(wsto) : B = High(wsto)
C = B.0 : Shift B , Right , 1 : B.7 = C
C = A.0 : Shift A , Right , 1 : A.7 = C
Wsto = A : Shift Wsto , Left , 8 : Wsto = Wsto + B
Set Oreset : Reset Oload : Waitms 2
Shiftout Odata , Oclock , Wsto , 2 , I
Reset Olatch : Waitms 2 : Set Olatch
End Sub
Saludos y gracias por comentar.
