Delucidazioni su SPI (codice assembly) MCU ATMEL

Sezione dedicata ai Microcontrollori e ai Sistemi Embedded

Re: Delucidazioni su SPI (codice assembly) MCU ATMEL

Postby deluca » 18 Apr 2013, 12:46

Allora, siccome la cosa mi incuriosisce molto, adesso ti allego un codice scritto in Bascom-avr con il quale potresti testare il tuo circuito.
Avvenuto ciò, potrai eventualmente concentrarti sul tuo prb e vedere più a basso livello quello che sta succedendo.
Controlla se i pin possono andar bene, oppure segnalami se è necessario ridefinirli.

nRF24L01_m8535.bas
(18.03 KiB) Downloaded 298 times

nRF24L01_m8535.hex
(11.78 KiB) Downloaded 265 times


Attenzione !!: I file saranno disponibili solo per qualche giorno.
Ciao
Il mio sito: http://www.delucagiovanni.com ......e la chat: chat/
User avatar
deluca
Site Admin
 
Posts: 1104
Joined: 19 Jun 2011, 10:44
Location: 95123 - Catania (Italy)

Re: Delucidazioni su SPI (codice assembly) MCU ATMEL

Postby gio919kun » 18 Apr 2013, 15:19

Quotando una parte del file
'==============================[ Config hardware ]==============================
Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 4 , Noss = 1
'Software SPI is NOT working with the nRF24L01, use hardware SPI only, but the SS pin must be controlled by our self

E' davvero così facile configurare l'SPI con bascom?O.O
Comunque oltre a CE e CSN i pin dovrebbero essere gli stessi. Ma come faccio a capire se sta funzionando??Cioè nel mio programma prendo il registro SPDR e lo metto sui LED della PORTC e invece qui?
gio919kun
 
Posts: 27
Joined: 16 Apr 2013, 11:39

Re: Delucidazioni su SPI (codice assembly) MCU ATMEL

Postby js-bascom » 18 Apr 2013, 23:10

e invece qui?
Ti manda le informazioni sulla porta serial che gia hai sul STK500.
Se no l'hai gia scarica un programma Terminal con cui potrai vedere cio' che il chip manda.
John Samperi
Ampertronics Pty. Ltd.
www.ampertronics.com.au
* Electronic Design * Custom Products * Contract Assembly
User avatar
js-bascom
 
Posts: 176
Joined: 23 Mar 2013, 02:53
Location: Sydney, AUSTRALIA Ex Nunziata, Mascali (CT)

Re: Delucidazioni su SPI (codice assembly) MCU ATMEL

Postby gio919kun » 19 Apr 2013, 15:25

Ti manda le informazioni sulla porta serial che gia hai sul STK500.
Se no l'hai gia scarica un programma Terminal con cui potrai vedere cio' che il chip manda.

Come si chiama il programma?lo devo utilizzare con avr studio?su windows su linux?spiegatemi per favore perchè non ho idea di come fare grazie
gio919kun
 
Posts: 27
Joined: 16 Apr 2013, 11:39

Re: Delucidazioni su SPI (codice assembly) MCU ATMEL

Postby deluca » 19 Apr 2013, 21:10

@gio919,
il codice bascom invia, per mezzo della istruzione PRINT, informazioni al terminale attraverso la linea seriale uart (rs-232).

Con un programma tipo Hyperterminal o similare per Windows o altro OS, configuri a 19200 baud e dopo aver connesso con cavo 232 o usb-232 adapter la board al pc, puoi ricevere le informazioni
che il codice spedisce con PRINT.... Il tutto mi sembra abb semplice.... cmq se hai dubbi non esitare.
Ciao
Il mio sito: http://www.delucagiovanni.com ......e la chat: chat/
User avatar
deluca
Site Admin
 
Posts: 1104
Joined: 19 Jun 2011, 10:44
Location: 95123 - Catania (Italy)

Re: Delucidazioni su SPI (codice assembly) MCU ATMEL

Postby gio919kun » 22 Apr 2013, 15:59

Buona sera a tutti.
Scusate l'assenza ma non ho avuto tempo per connettermi, tuttavia ho effettuato altri test, sempre basati sul mio codice e assembly. Il codice è leggermente diverso da quello postato sopra ma cambia poco, solo un po di bug fix ma l'impostazione è la stessa. Arriviamo al punto, HA FUNZIONATO!!! Già, ma solo per on po di tempo dopo di che non ho più visto quei LED che si accendevano (e non ho potuto confermare se si accendevano nel modo corretto). Quindi ho continuato ad effettuare altri test col risultato di aver bruciato il chip...Visto e considerato che mi sono rimasti giusto due chip (e che essendo di provenienza cinese mettono un po ad arrivare) ho preferito smettere di fare test. A giorni andrò a comprare dei regolatori da 3,3 V per evitare spiacevoli sorprese. Intanto stò cercando di perfezionare il codice e di completarlo, visto che quello postato sopra è solo una parta. Appena avrò i regolatori riprenderò i test e in caso di esito negativo proverò col codice bascom.
gio919kun
 
Posts: 27
Joined: 16 Apr 2013, 11:39

Re: Delucidazioni su SPI (codice assembly) MCU ATMEL

Postby gio919kun » 30 Apr 2013, 20:58

Buona sera, mi faccio risentire con niente di concluso.
Ancora il solito problema, ho provato a effettuare la prova col codice bascom e hyper terminal e non mi torna niente il cursore resta sempre fermo. Ho controllato i piedini e sono tutti collegati per bene. Ora vi posto lo screenshot delle impostazioni della porta magari sbaglio qualcosa li. E poi un'altra cosa quando nel file bascom dice :
Code: Select all
Config Pinc.3 = Input                                  'TX/RX Device _select

non ho idea di come collegarlo e a cosa serva.
Aspetto vostre risposte grazie :)
Attachments
img.jpeg
img.jpeg (97.22 KiB) Viewed 7616 times
gio919kun
 
Posts: 27
Joined: 16 Apr 2013, 11:39

Re: Delucidazioni su SPI (codice assembly) MCU ATMEL

Postby deluca » 30 Apr 2013, 21:20

salve gio919,
Premesso che hai effettuato tutte le connessioni come riportate sul codice bascom,
premesso che stai usando un atmega8535 con quarzo da 8Mhz,
ponendo il pin c.3 (txrx_device) = 1 abiliti la parte di codice relativa alla trasmissione,
altrimenti avvi la parte relativa alla ricezione:

PS: hai effettuato i seguenti collegamenti?
Ce Alias Portc.5
Ss Alias Portb.2
Irq Alias Pinc.4
Txrx_device Alias Pinc.3


Code: Select all
If Txrx_device = True Then Goto Main_tx                     'Is this the RX or TX device?
'===================================[ Main rx ]=================================
Main_rx:
   Call R_register(status , 1)                              'Read STATUS register

   Print "Rx_device"                                        'Send to terminal who i'm

   Reset Ce                                                 'Set CE low to access the registers

   Gosub Setup_rx                                           'Setup the nRF24L01 for RX
      Waitms 2                                              'Add a delay before going in RX
   Set Ce                                                   'Set nRF20L01 in RX mode

Do                                                          'Main loop for RX
   If Irq = 0 Then                                          'Wait until IRQ occurs, pin becomes low on interrupt
      Reset Ce                                              'Receiver must be disabled before reading pload

      Do                                                    'Loop until all 3 fifo buffers are empty
         Call R_register(rd_rx_pload , 5)                   'Read 5 bytes RX pload register
         Print "Pload  : " ; Hex(b_bytes(1)) ; Hex(b_bytes(2)) ; _
                              Hex(b_bytes(3)) ; Hex(b_bytes(4)) ; Hex(b_bytes(5))       'Print the pload
         Call R_register(fifo_status , 1)                   'Read FIFO_STATUS
      Loop Until B_bytes(1).0 = True                        'Test or RX_EMPTY bit is true, RX FIFO empty

      D_bytes(1) = Write_reg + Status                       'Reset the RX_DR status bit
      D_bytes(2) = &B01000000                               'Write 1 to RX_DR bit to reset IRQ
      Call W_register(2)

      Set Ce                                                'Enable receiver again
      Waitms 2
   End If
'--Gosub Dump_registers                                        'Unremark me for debugging
Loop
Return

'=====================================[ Main tx ]===============================
Main_tx:
   Print "TX_device"                                        'Send to terminal who i'm

   D_bytes(1) = Flush_tx                                    'Flush the TX_fifo buffer
   Call W_register(1)

   D_bytes(1) = Write_reg + Status                          'Reset the IRQ bits
   D_bytes(2) = &B_0011_0000
   Call W_register(2)

   Do                                                       'Main loop for TX
      Incr Packet_count                                     'Increase the send packet counter, for test only
      If Packet_count > 254 Then Packet_count = 0
      Gosub Setup_tx                                        'Setup the nRF240L01 for TX

      D_bytes(1) = Wr_tx_pload                              'Put 5 bytes in the TX pload buffer
      D_bytes(2) = &HAA                                     'Byte 1
      D_bytes(3) = &HBB                                     'Byte 2
      D_bytes(4) = &HCC                                     'Byte 3
      D_bytes(5) = &H11                                     'Byte 4
      D_bytes(6) = Packet_count                             'Byte 5 will be increase every loop
      Call W_register(6)                                    'Write 6 bytes to register

         Waitms 2
      Set Ce                                                'Set CE for a short moment to transmit the fifo buffer
         Waitms 1                                           '
      Reset Ce                                              '
         Waitms 100                                         'Some delay to read the output on the terminal, line can be removed for max. speed
      W = 0                                                 'Counter for time out

      Do
      If Irq = 0 Then
         Call R_register(status , 1)
         Temp = B_bytes(1) And &B01110000                   'Mask the IRQ bits out the status byte

         Select Case Temp                                   'Which IRQ occurs

            Case Max_rt                                     'MAX_RT
               Print "Maximum number of TX retries, Flussing the TX buffer now !"
               D_bytes(1) = Flush_tx                        'Flush the TX buffer
               Call W_register(1)
               D_bytes(1) = Write_reg + Status
               D_bytes(2) = &B00010000                      'Clear the MAX_RT IRQ bit
               Call W_register(2)
               Exit Do

            Case Tx_ds                                      'TX_DS
               Print "Packet " ; Packet_count ; " send and ACK received."
               D_bytes(1) = Write_reg + Status
               D_bytes(2) = &B00100000                      'Clear the TX_DS IRQ bit
               Call W_register(2)
               Exit Do

            Case Else                                       'Other IRQ ??
               Print "Other irq " ; Bin(temp)
               D_bytes(1) = Flush_tx                        'Flush the TX buffer
               Call W_register(1)
               D_bytes(1) = Write_reg + Status
               D_bytes(2) = &B00110000                      'Clear both MAX_RT, TX_DS bits
               Call W_register(2)
         End Select
      End If

      Waitms 1                                              'Time out waiting for IRQ 1ms * 100
      Incr W                                                'Increment W

      If W > 100 Then                                       'Waited for 100ms
         Print "No irq response from RF20L01 within 100ms"
         Exit Do                                            'Exit the wait loop
      End If
   Loop
Loop

Return
Ciao
Il mio sito: http://www.delucagiovanni.com ......e la chat: chat/
User avatar
deluca
Site Admin
 
Posts: 1104
Joined: 19 Jun 2011, 10:44
Location: 95123 - Catania (Italy)

Re: Delucidazioni su SPI (codice assembly) MCU ATMEL

Postby gio919kun » 30 Apr 2013, 21:46

Sisi ho impostato tutto come nel codice (ho anche verificato col tester) e stò usando un atmega8535 a 8 Mhz (Oscillatore interno). La porta è impostata bene?
gio919kun
 
Posts: 27
Joined: 16 Apr 2013, 11:39

Re: Delucidazioni su SPI (codice assembly) MCU ATMEL

Postby gio919kun » 30 Apr 2013, 21:47

ponendo il pin c.3 (txrx_device) = 1 abiliti la parte di codice relativa alla trasmissione,
altrimenti avvi la parte relativa alla ricezione

Quindi se non è collegate è impostato come ricevitore?
gio919kun
 
Posts: 27
Joined: 16 Apr 2013, 11:39

Re: Delucidazioni su SPI (codice assembly) MCU ATMEL

Postby deluca » 30 Apr 2013, 21:51

La porta sembra essere configurata in modo corretto.

A proposito del pinc.3, dipende dalla presenza o no della resistenza di pull-up.
Io ti consiglio di forzare a massa o a Vcc....

Tensioni alimentazione?
prova a postare la foto reale del progetto e lo schema elettrico....
Ciao
Il mio sito: http://www.delucagiovanni.com ......e la chat: chat/
User avatar
deluca
Site Admin
 
Posts: 1104
Joined: 19 Jun 2011, 10:44
Location: 95123 - Catania (Italy)

Re: Delucidazioni su SPI (codice assembly) MCU ATMEL

Postby gio919kun » 30 Apr 2013, 22:02

Di schema elettrico non c'è quasi niente dato che è tutto collegato tutto all'STK che è alimentato a 12 V e il modulo a 3,3 e per quest'ultima ho provato prima con alimentatore di un pentium 4 e ora invece li stò prendendo direttamente da un arduino.
gio919kun
 
Posts: 27
Joined: 16 Apr 2013, 11:39

Re: Delucidazioni su SPI (codice assembly) MCU ATMEL

Postby js-bascom » 30 Apr 2013, 22:06

stò usando un atmega8535 a 8 Mhz (Oscillatore interno).
Hai cambiato il fusibile CKDIV8? Se no allora l'oscillatore e' solo 1MHz.
John Samperi
Ampertronics Pty. Ltd.
www.ampertronics.com.au
* Electronic Design * Custom Products * Contract Assembly
User avatar
js-bascom
 
Posts: 176
Joined: 23 Mar 2013, 02:53
Location: Sydney, AUSTRALIA Ex Nunziata, Mascali (CT)

Re: Delucidazioni su SPI (codice assembly) MCU ATMEL

Postby gio919kun » 30 Apr 2013, 22:15

Hai cambiato il fusibile CKDIV8? Se no allora l'oscillatore e' solo 1MHz.

No, ma non lo vedo nelle impostazioni dei fuses, non dovrebbe essere li?
gio919kun
 
Posts: 27
Joined: 16 Apr 2013, 11:39

Re: Delucidazioni su SPI (codice assembly) MCU ATMEL

Postby js-bascom » 30 Apr 2013, 22:22

No, perche' non esiste nel vecchio M8535. Scusa e' al vecchiaia sai (la mia). :oops:

Allora sei sicuro di avere 8MHz impostati sui fusibili?
John Samperi
Ampertronics Pty. Ltd.
www.ampertronics.com.au
* Electronic Design * Custom Products * Contract Assembly
User avatar
js-bascom
 
Posts: 176
Joined: 23 Mar 2013, 02:53
Location: Sydney, AUSTRALIA Ex Nunziata, Mascali (CT)

Re: Delucidazioni su SPI (codice assembly) MCU ATMEL

Postby gio919kun » 30 Apr 2013, 22:24

Sicuro è una parola forte data la situazione, ormai non sono più sicuro di niente però si dal tool avr studio ho impostato 8 Mhz
gio919kun
 
Posts: 27
Joined: 16 Apr 2013, 11:39

Re: Delucidazioni su SPI (codice assembly) MCU ATMEL

Postby js-bascom » 01 May 2013, 07:19

Riguardo il programma terminale: Hai connesso i pin Tx e RX (14 e 15) del Mega8535 al convertitore RS232 che esiste sul STK500?

Stai usando la presa RS232 per la communicazione? (RS232 spare) Cioe NON quella usata per programmare il chip? (RS232 CNTRL)
John Samperi
Ampertronics Pty. Ltd.
www.ampertronics.com.au
* Electronic Design * Custom Products * Contract Assembly
User avatar
js-bascom
 
Posts: 176
Joined: 23 Mar 2013, 02:53
Location: Sydney, AUSTRALIA Ex Nunziata, Mascali (CT)

Re: Delucidazioni su SPI (codice assembly) MCU ATMEL

Postby js-bascom » 01 May 2013, 07:58

Allora ci sono delle buone e cattive notizie. :o

Per autopunizione di averti imbrogliato con i fusibili ho montato un M8535 sul mio STK500 e ho programmato il file .hex postato sopra.

La comunicazion RS232 non lavora bene con l'oscillatore interno a 8MHz a causa della possibile variazione di frequenza con la temperatura etc. pero' funziona benissmo con un cristallo 8MHz montato sul STK500.

Naturalmente se avessi il chip RF dovrebbe pure comunicare col il chip e vedere i risultati sullo schermo.
Attachments
nRF24L01_m8535 bas.jpg
nRF24L01_m8535 bas.jpg (101.22 KiB) Viewed 7606 times
John Samperi
Ampertronics Pty. Ltd.
www.ampertronics.com.au
* Electronic Design * Custom Products * Contract Assembly
User avatar
js-bascom
 
Posts: 176
Joined: 23 Mar 2013, 02:53
Location: Sydney, AUSTRALIA Ex Nunziata, Mascali (CT)

Re: Delucidazioni su SPI (codice assembly) MCU ATMEL

Postby gio919kun » 01 May 2013, 10:47

Riguardo il programma terminale: Hai connesso i pin Tx e RX (14 e 15) del Mega8535 al convertitore RS232 che esiste sul STK500?

Ecco cosa mancava...non avevo collegato il TX e RX, ora la comunicazione funziona e questo è il risultato:
img2.jpeg
img2.jpeg (242.57 KiB) Viewed 7604 times

se invece lo imposto come ricevitore mi dice payload 00000000
gio919kun
 
Posts: 27
Joined: 16 Apr 2013, 11:39

Re: Delucidazioni su SPI (codice assembly) MCU ATMEL

Postby gio919kun » 03 May 2013, 09:22

Ciao ragazzi, l'avete visto lo screenshot?significa che sta funzionando bene?
gio919kun
 
Posts: 27
Joined: 16 Apr 2013, 11:39

PreviousNext

Return to Microcontrollori e microprocessori

Who is online

Users browsing this forum: No registered users and 2 guests