Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

spi tra ATmega328p e Raspberry pi 2

Tipologie, strumenti di sviluppo, hardware e progetti

Moderatore: Foto UtentePaolino

0
voti

[1] spi tra ATmega328p e Raspberry pi 2

Messaggioda Foto Utentescipiusbarbatus » 30 giu 2015, 7:06

Saluti a tutti,
creo un nuovo post perché l'argomento mi sembra diverso.
Sto cercando di interfacciare tramite spi il micro ATmega328p (quello di arduino) e un raspberry pi 2 (40 pin).
Purtroppo non riesco ad ottenere nessuna comunicazione tra i due. Vi posto i dettagli del progetto.

Ho collegato i seguenti pin:
ATmega------->Raspberry PI
17------------->19 (MOSI)
18------------->21 (MISO)
19------------->23 (SCLK)
22------------->20 (GND)

Codice: Seleziona tutto
    #define F_CPU 20000000UL
    #include <avr/io.h>
    #include <util/delay.h>

    void spi_init_slave (void)
    {
       DDRB=(1<<6);                                  //MISO as OUTPUT
       SPCR=(1<<SPE);                                //Enable SPI
    }

    unsigned char spi_tranceiver (unsigned char data)
    {
       SPDR = data;                                  //Load data into buffer
       while(!(SPSR & (1<<SPIF) ));                  //Wait until transmission complete
       return(SPDR);                                 //Return received data
    }

    int main(void)
    {
       spi_init_slave();
       unsigned char data, buffer[10];
       uint8_t x = 0;
       
       while(1)
       {
          data = spi_tranceiver(++x);
           _delay_ms(1000);   
       }     
    }



Raspberry pi 2:
Codice: Seleziona tutto
    import spidev
    import time

    spi=spidev.SpiDev()

    spi.open(0,0)
    try:
        while True:
            resp = spi.xfer2([0xAA])
            print "receiving:", resp[0]
            time.sleep(1.0)
    except KeyboardInterrupt:
        spi.close()



Cosa c'è che non va? Mi potete aiutare?
Avatar utente
Foto Utentescipiusbarbatus
35 3
 
Messaggi: 38
Iscritto il: 21 lug 2012, 18:12

2
voti

[2] Re: spi tra ATmega328p e Raspberry pi 2

Messaggioda Foto UtenteTardoFreak » 30 giu 2015, 13:36

Ad una prima occhiata,
Non vedo il collegamento sul pin SS. Quello ci vuole altrimenti come fa AVR a capire quando stanno trasmettendo a lui?
Codice: Seleziona tutto
data = spi_tranceiver(++x);

semmai
Codice: Seleziona tutto
data = spi_tranceiver(x++);

Anche solo per usare anche l'elemento 0.

Il delay(1000) non ha ragione di esistere.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[3] Re: spi tra ATmega328p e Raspberry pi 2

Messaggioda Foto Utentescipiusbarbatus » 30 giu 2015, 20:31

Saluti,
ho collegato il pin 22 di raspberry con il pin 17 dell'Atmega. Corretto l'incremento su x, commentato il delay, ma il risultato è sempre "receiving: 0"...
Aiuto!!!!
Dato che il raspberry con spidev_test.c funziona, penserei a qualcosa su ATmege, ma il programma mi sembra così semplice da essere corretto.
Avete dei suggerimenti?
Avatar utente
Foto Utentescipiusbarbatus
35 3
 
Messaggi: 38
Iscritto il: 21 lug 2012, 18:12

1
voti

[4] Re: spi tra ATmega328p e Raspberry pi 2

Messaggioda Foto UtentePietroBaima » 30 giu 2015, 20:38

E' tutto a 3.3 V, vero?
Generatore codice per articoli:
nomi
Sul forum:
[pigreco]=π
[ohm]=Ω
[quadrato]=²
[cubo]=³
Avatar utente
Foto UtentePietroBaima
90,7k 7 12 13
G.Master EY
G.Master EY
 
Messaggi: 12206
Iscritto il: 12 ago 2012, 1:20
Località: Londra

0
voti

[5] Re: spi tra ATmega328p e Raspberry pi 2

Messaggioda Foto Utentescipiusbarbatus » 30 giu 2015, 21:21

Si, certo, per sicurezza derivo l'alimentazione dal raspberry.
Ho riprovato con spidev_test, collegato all'atmega e ottengo solo 0, mentre se collego MISO con MOSI di raspberry ottengo i valori esadecimali corretti...
sul pin 16 di atmega leggo circa 3 volt.
Può essere un problema FCPU di atmega a 20MHz?
Avatar utente
Foto Utentescipiusbarbatus
35 3
 
Messaggi: 38
Iscritto il: 21 lug 2012, 18:12

0
voti

[6] Re: spi tra ATmega328p e Raspberry pi 2

Messaggioda Foto UtentePietroBaima » 30 giu 2015, 21:51

dal raspberry partono 2 fili, +3.3V e GND e vanno all'alimentazione dell'AVR, poi c'è MISO MOSI SCK SS ?
Generatore codice per articoli:
nomi
Sul forum:
[pigreco]=π
[ohm]=Ω
[quadrato]=²
[cubo]=³
Avatar utente
Foto UtentePietroBaima
90,7k 7 12 13
G.Master EY
G.Master EY
 
Messaggi: 12206
Iscritto il: 12 ago 2012, 1:20
Località: Londra

0
voti

[7] Re: spi tra ATmega328p e Raspberry pi 2

Messaggioda Foto Utentescipiusbarbatus » 30 giu 2015, 21:55

Esatto. I 20MHz del Atmega centrano qualcosa?
Avatar utente
Foto Utentescipiusbarbatus
35 3
 
Messaggi: 38
Iscritto il: 21 lug 2012, 18:12

1
voti

[8] Re: spi tra ATmega328p e Raspberry pi 2

Messaggioda Foto UtentePietroBaima » 30 giu 2015, 21:59

Come glieli dai i 20 MHz? Quarzo+2 C? su cosa l'hai montato?
Generatore codice per articoli:
nomi
Sul forum:
[pigreco]=π
[ohm]=Ω
[quadrato]=²
[cubo]=³
Avatar utente
Foto UtentePietroBaima
90,7k 7 12 13
G.Master EY
G.Master EY
 
Messaggi: 12206
Iscritto il: 12 ago 2012, 1:20
Località: Londra

3
voti

[9] Re: spi tra ATmega328p e Raspberry pi 2

Messaggioda Foto UtentePietroBaima » 30 giu 2015, 22:03

AHA! GOTCHA!

Ho aperto il data-sheet di quel micro e ho trovato questo:

Speed Grade:0 - 4MHz@1.8 - 5.5V, 0 - 10MHz@2.7 - 5.5.V, 0 - 20MHz @ 4.5 - 5.5V


Non puoi farlo andare a 20 MHz e anche a 3.3V, gli tiri il collo!
Generatore codice per articoli:
nomi
Sul forum:
[pigreco]=π
[ohm]=Ω
[quadrato]=²
[cubo]=³
Avatar utente
Foto UtentePietroBaima
90,7k 7 12 13
G.Master EY
G.Master EY
 
Messaggi: 12206
Iscritto il: 12 ago 2012, 1:20
Località: Londra

0
voti

[10] Re: spi tra ATmega328p e Raspberry pi 2

Messaggioda Foto Utentescipiusbarbatus » 30 giu 2015, 22:10

Si, ho un quarzo da 20Mhz e due condesatori. Tutto su breadboard.
Cosa potrei fare? Togliere il quarzo? Resetto i fuses e lavoro a 8Mhz?
Avatar utente
Foto Utentescipiusbarbatus
35 3
 
Messaggi: 38
Iscritto il: 21 lug 2012, 18:12

Prossimo

Torna a Realizzazioni, interfacciamento e nozioni generali.

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti