Autor Tema: Problemas con comunicacion SPI con Atmega8  (Leído 6804 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Cerbero

  • PIC10
  • *
  • Mensajes: 6
Problemas con comunicacion SPI con Atmega8
« en: 29 de Abril de 2010, 00:52:26 »
Q más, saludos . Tengo un gran problema con la comunicación SPI. Estoy usando la atmega8, he tratado de usar ATMEGA48 pero no se por q pero incluso en la simulación no funciona para nada.

Estoy programando en Bascom. Hasta ahora, la simulación, que esta en Proteus (ISIS), funciona perfectamente, pero una vez que trato en el hardware no funciona para nada.

Rebise algo sobre la programación los bits de fusibles (fuse bits), y parece que está bien. He usado los programas extreme burner y progisp para programar el mu. Pero siempre hay el mismo error (no hay comunicación SPI, incluso no hay las señales de miso, Mosi, SCK, etc, estoy usando un osciloscopio para ver estas formas de onda).

Aquí dejo mi código de prueba (en Bascom), revísenlo xfa y diganme si algo anda mal.
Algo que estoy empezando a dudar es si se puede usar el hardware de comunicación SPI, pues está siendo usado para por el programados, pero yo diría que si hay como. Por favor, ayuda.

Una pregunta muy importante, si estoy usando el micro como maestro, no importa si está o no conectado con un esclavo o un dispositivo SPI, deberia tener las formas de onda y comunicación en los pines miso, Mosi, las señales de SCK, ¿verdad, o estoy equivocado?

Si alguien quiere más información sobre el programa no hay prob le puedo enviar mi programa de pruebas, simulación en ISIS, por favor verifiquen y si encontran algo malo por favor hágamelo saber
PD: el proyecto en el futuro va ha utilizar esta comunicación con el ADE7758 y con un módulo Wi-Fi, por lo que lo más importante por ahora es de que la comunicación spi.
 
Código: [Seleccionar]
$hwstack = 32 ' default use 32 for the hardware stack
$swstack = 10 ' default use 10 for the SW stack
$framesize = 40 ' default use 40 for the frame space
Dim A As Byte , S As String * 3 , Addresset(9) As Byte , Readdata(14) As Byte , Meter As Bit , Wifi As Bit
Dim Addresdat(5) As String * 4 , Valor(5) As String * 1
Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 4 , Noss = 1 ', SPIIN=value
Ddrb.2 = 1
Ddrb.1 = 1
'Config Portb.1 = Output
'Config Portb.2 = Output

Addresset(1) = &H93 'address de OPMODE (ojo ya esta con el MCB en 1 para escritura a esta address, original h13) a ser seteada, ojo la direccion de WAVMODE es 0x15 pero la voy a dejar con del set default
Addresset(2) = &H00 'Valor de OPMODE a ser seteado
Addresset(3) = &H94 'address de MMODE (ojo ya esta con el MCB en 1 para escritura a esta address, origina h14)a ser seteada, ojo la direccion de COMPMODE es 0x16 pero la voy a dejar con del set default
Addresset(4) = &H04 'Valor de MMODE a ser seteado
Addresset(5) = &HA3 'address de GAIN (ojo ya esta con el MCB en 1 para escritura a esta address, original h23)a ser seteada,esta dierccion posee los valoers de ganacia y escala de I y V en al PGA ojo la direccion de LCYCMODE es 0x17 pero la voy a dejar con del set default
Addresset(6) = &H40 'Valor de OPMODE a ser seteado
Addresset(7) = &H13
Addresset(Cool = &H14
Addresset(9) = &H23


Prob:
Wait 1
Set Portb.1
Set Portb.2

Display On
Cls
Lcd "komodo"
Locate 2 , 4 : Lcd "Poli"
Wait 2
For A = 1 To 10
Shiftlcd Right 'shift the text to the right
Wait 1 'wait a moment
Next
Spiinit
Reset Portb.2
Spiout Addresset(7) , 1
Set Portb.2
Reset Portb.2
Spiin Readdata(1) , 1
Set Portb.2
Waitms 100
Set Portb.2
Spiout Addresset(Cool , 1
Set Portb.2
Reset Portb.2
Spiin Readdata(2) , 1
Set Portb.2
Reset Portb.2
Spiout Addresset(9) , 1
Set Portb.2
Reset Portb.2
Waitms 1
Set Portb.2
Reset Portb.2
Spiin Readdata(3) , 1
Set Portb.2
Reset Portb.2
Spiout Addresset(7) , 1
Set Portb.2
Reset Portb.2
Spiin Readdata(4) , 1
Set Portb.2
Cls
For A = 1 To 4
Addresdat(a) = Hex(readdata(a))
Valor(a) = Str(a)
Locate A , 2 : Lcd "Valor"
Lcd Valor(a)
Lcd Addresdat(a)
Wait 1
Next A
Wait 10
Cls
Locate 1 , 4 : Lcd "Pruebas"
S = Str(a)
Lcd S
Wait 3
'Spiinit
Spiout Addresset(1) , 6
Spiout Addresset(7) , 1
Waitms 1
Spiin Readdata(1) , 1
Waitms 1
Spiout Addresset(Cool , 1
Spiin Readdata(2) , 1
Spiout Addresset(9) , 1
Waitms 1
Spiin Readdata(3) , 1
Waitms 1
Spiout Addresset(7) , 1
Spiin Readdata(4) , 1
Cls
For A = 1 To 4
Addresdat(a) = Hex(readdata(a))
Valor(a) = Str(a)
Locate A , 2 : Lcd "Valor"
Lcd Valor(a)
Lcd Addresdat(a)
Wait 1
Next A
Wait 10
Goto Prob
« Última modificación: 29 de Abril de 2010, 21:50:55 por Cerbero »
Gracias

Desconectado stk500

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4919
Re: Problemas con comunicacion SPI con Atmega8
« Respuesta #1 en: 29 de Abril de 2010, 10:19:35 »
Cual version tiene de AVRBascom? y deberia poner tu codigo completo con micro a ver si puedo ayudarte.

Desconectado Cerbero

  • PIC10
  • *
  • Mensajes: 6
Re: Problemas con comunicacion SPI con Atmega8
« Respuesta #2 en: 29 de Abril de 2010, 16:40:23 »
Estoy usando la ultima la 1.11.9.5 (la estoy corriendo el wind7 xsia), el icro que estoy usando es el atmega8, una buena parte de la config la hago en, la opcion de modifiacion de seteo o caracteristicas del chip q t da bascom. Las caracteristicas son 8MH(interno), ld 16x4 de 4 bits, la distribucion delos pines para la lcd son, Portb7(E),portb6(RS),portb0(dt7), portd7(dt6), portd6(dt5), portd5; esta activada la casilla de SPI por Hardware aunque como t puedes dar cuenta tambien la seteo en el prog, por razon d una caracteristicas espeiales del ADE7758 q debo añadir luego. El resrto del codigo es el mismo q esta adjunto ariba. Con todo si crees conveniento dandame tu mail por mensaje personal y t envio la info q tengo para que la revises.
Gracias
Gracias

Desconectado The_Chosen

  • PIC12
  • **
  • Mensajes: 51
Re: Problemas con comunicacion SPI con Atmega8
« Respuesta #3 en: 29 de Abril de 2010, 16:51:19 »
Estoy usando la ultima la 1.11.9.5 (la estoy corriendo el wind7 xsia), el icro que estoy usando es el atmega8, una buena parte de la config la hago en, la opcion de modifiacion de seteo o caracteristicas del chip q t da bascom. Las caracteristicas son 8MH(interno), ld 16x4 de 4 bits, la distribucion delos pines para la lcd son, Portb7(E),portb6(RS),portb0(dt7), portd7(dt6), portd6(dt5), portd5; esta activada la casilla de SPI por Hardware aunque como t puedes dar cuenta tambien la seteo en el prog, por razon d una caracteristicas espeiales del ADE7758 q debo añadir luego. El resrto del codigo es el mismo q esta adjunto ariba. Con todo si crees conveniento dandame tu mail por mensaje personal y t envio la info q tengo para que la revises.
Gracias

Disculpa, ¿revisaste la dirección y el estado del pin SS? ya que si dices que en la simulación te funciona bien, por descarte tiene que ser algo externo o físico.
« Última modificación: 29 de Abril de 2010, 16:55:04 por The_Chosen »

Desconectado Cerbero

  • PIC10
  • *
  • Mensajes: 6
Re: Problemas con comunicacion SPI con Atmega8
« Respuesta #4 en: 29 de Abril de 2010, 20:29:03 »
si ya revise eso , si te das cuenta en el programas estan dos pines configurados como salidas en uno es meter y el portb1 y el portb2, que sirven para dar el pulso para los esclavos del dedidor y del moduli wifi(q se conectaran a futuo, una vez q ya tenga la comunicacion spi). ahora la pregunta del millon. Segun lo q entiendo y segun yo, como a este micro(atmega 8), lo estoy usando como master, en eralidad no importaria para nada el SS o incluso la señal del control para los esclavos, pues una vez q mado el somando spiin o spiout, en ese instante se deberia dar el clock de sincronizacion(sck)y el envio o recepcion de datos (miso,mosi), lo que obligatoriamente se deberia ver en el osciloscopin(esto q acabo d explicar lo revise en la simulacion y si cumple). es decir los pines de comando o control para los esclavos, solo es para alertarlos y q acepten esta trama de datso. Estoy en lo correcto Verdad??
Gracias

Desconectado Cerbero

  • PIC10
  • *
  • Mensajes: 6
Re: Problemas con comunicacion SPI con Atmega8
« Respuesta #5 en: 30 de Abril de 2010, 13:48:31 »
En base a algunas preguntas comunes que he encontrado en algunos foros, voy a tratar de publicar tanta información q pueda ser útiles para algunas personas, y también ayudar a alguien con el fin de identificarme el problema y ayudarme.

1 - les dejo mi código de prueba con algunos comentarios para saber lo que son y como yo estoy haciendo algunas líneas de código.
2 - Voy a publicar el esquema que estoy usando para probar en Proteus, es básicamente el mismo que está en el hardware.
3 - Voy a publicar, como está la config de los fuse y lock-bits. (Les dejo la configuración usada en WINPIC800, es lo mismo que estoy usando en el extreme burner y progisp. ninguno funciona en el hardware)

Algunas de las respuestas importantes para algunas preguntas comunes.
 
1 .- Estoy usando Atmega8, los esclavos se son  un módulo Wifi y ade7758, ambos necesitan o necesitarán la comunicación SPI para trabajar en el futuro. Tengo 3 atmega8 he intentado con todos ellos el mismo resultado (sin comunicación spi, no hay formas de onda spi a SCK, miso, Mosi, que había sido revisada con un osciloscopio)
2 .- En hardware, la pantalla LCD está conectada y en funcionamiento, por lo que significa que el Atmega está bien (con uno de ellos había una presentación más lenta, se ve como un problema con los fusibles pero no he revisado y cambiado todavía).
3 .- Los cables de Spi están alrededor de 5-7 cm de largo (2-2.5 pulgadas). Incluso al conectar el osciloscopio directamente a los pines Atmega, no tengo nada.
4 .- La fuente de alimentación (5V), que funciona bien, re-comprobado. Incluso la he utilizado en otro proyecto y funciona bien.
-----------------

Algunas preguntas mias.
He encontrado algunos mensajes sobre problemas con Bascom, así que voy a cambiar a C, sin embargo, debe haber una manera de solucionar este problema, por lo que realmente me gustaría si alguien me podría ayudar y solucionar este problema, pero como estoy algo atrasado con este proyecto voy a empezar a hacerlo en C o C + +. Ya he descarga IAR Embedded Workbench de Atmel AVR 5.20 y estoy descargando codevision (por favor, como ya he dicho es mi primera vez con Atmel AVR y estoy un poco perdido y se desesperado). Así que si alguien pudiera ayudarme me aconsejan un buen compilador y algunos ejemplos de código, sería el éxito.
Encontré en un foro que sale en Proteus pues Es un error propio del prog, alguien me puede decir por q
Gracias
PD: voy a subir algunas cosas, si hay como.
Gracias

Desconectado The_Chosen

  • PIC12
  • **
  • Mensajes: 51
Re: Problemas con comunicacion SPI con Atmega8
« Respuesta #6 en: 30 de Abril de 2010, 14:41:37 »
Hola cerbero, ¿qué cristal estás usando? ¿8 MHz? ¿16MHz?

Cuando tengo un problema con algún módulo de algún microcontrolador pues lo que hago es probarlo aparte, es decir, programar el módulo por separado con líneas de programación lo más sencillas posibles,y así le voy agregándole más cosas para variar su complejidad.

Te recomiendo que leas este tutorial de la página de olimex:

http://www.olimex.cl/present.php?page=tut_avr_mt_intro&c=1

Ahí te explican que programa y compilador usar (la mayoría usa AVRstudio, que la proporciona Atmel) además de nociones básicas de programación en C para microcontroladores atmel.  ;-) ;-)


Desconectado stk500

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4919
Re: Problemas con comunicacion SPI con Atmega8
« Respuesta #7 en: 30 de Abril de 2010, 16:03:24 »
Hola Cerbero,
he estado probando tu codigo, de momento: 1 tu define el micro en tu programa,
                                                                        2 tampoco pone con cristal trabaja
                                                                        3 para simular deberia quitar los Stack
$REGFILE = "m8DEF.DAT"
$crystal = 4000000
$hwstack = 32       ' default use 32 for the hardware stack
$swstack = 10       ' default use 10 for the SW stack
el esquema que pusiste es para mi engorroso, asi no podra ayudarte nadie,deberia hacer bien tu esquema , aunque no soy experto con el Proteus, cosas que nunca lo simulo, siempre lo hago en la placa.
te aconsejo que monte el programador STK300 es muy simple.

 

Desconectado alvaro_19v

  • PIC10
  • *
  • Mensajes: 1
Re: Problemas con comunicacion SPI con Atmega8
« Respuesta #8 en: 04 de Junio de 2010, 10:37:44 »
Hola a todos
Según mi experiencia con el ADE7758 el problema esta en el timing de las señales, recomiendo que utilicen el SPI  por software con un delay de 1 us para el clock (excepto para el tiempo entre read comand y de lectura desde el ADE que debe ser 4 us minimamente)

A mi me funcionó bastante bien.