Comunicazione Seriale sincrona pin

Ciao a tutti! :slight_smile:

io ho un piccolo problema, facendo diverse ricerche su internet non riesco a configurare la trasmissione seriale. in parole povere ho bisogno di avere
|un BIT di start| un byte di dati| un bit EVER o ODD (dipende dalla situazione) | 2 bit di stop|

e deve essere in modalita sincrona con l’utilizzo del pin 4 XCK (clock)

per farvi un idea ecco cosa voglio controllare: screenkeys.com

non riesco a capire dove sbaglio…

grazie in anticipo

questo e’ quello che ho scritto

void USART_Init( unsigned int ubrr)
{
UBRR0H = (unsigned char)(ubrr>>8 );
UBRR0L = (unsigned char)ubrr;
UCSR0B = (1<<TXEN0);
UCSR0C = (1<<USBS0)|(3<<UCSZ00)|(1<<UMSEL00);
}

void USART_Transmit_Even( unsigned char datausart )
{
UCSR0C = (1<<UPM01)|(0<<UPM00);
while ( !( UCSR0A & (1<<UDRE0)) );
UDR0 = datausart;
}

void USART_Transmit_Odd( unsigned char datausart1 )
{
UCSR0C = (1<<UPM01)|(1<<UPM00);
while ( !( UCSR0A & (1<<UDRE0)) );
UDR0 = datausart1;
}

Se guardi lo schema alla pagina 17 lo schema 7.1 del datasheet vedi che puoi spedire 16 bit.
La cosa piú semplice é che usi la SPI di Arduino e mandi 2 volte 8 bit per ogni Byte di dati.

Ciao Uwe

quindi mi stai dicendo che mi semplifico tutto usando 2 shift register come in 7.1?
oggi pomeriggio provo un po’ a fare qualcosa

denysmomo:
quindi mi stai dicendo che mi semplifico tutto usando 2 shift register come in 7.1?
oggi pomeriggio provo un po' a fare qualcosa

Questo non l'ho mica detto.
ho detto:

La cosa piú semplice é che usi la SPI di Arduino e mandi 2 volte 8 bit per ogni Byte di dati.

Ciao Uwe

uwefed:
La cosa piú semplice é che usi la SPI di Arduino e mandi 2 volte 8 bit per ogni Byte di dati.

Così non credo funzioni, il suo hardware richiede una seriale sincrona e non una spi, sebbene simili come funzionamento lavorano in modo diverso.
In teoria l'Atmega328 supporta la seriale sincrona classica, data e clock, però il data sheet è abbastanza fumoso sulla cosa, parla in modo estensivo solo della modalità asincrona e della modalità spi per la USART.
Tocca cercare tra le Application Note di Atmel se c'è qualcosa di specifico sul come usare l'USART in modalità sincrona, purtroppo non ho mai avuto questa esigenza con gli AVR, l'ho fatto su altri tipi di micro, e non posso dare consigli in merito.

Se guardi lo schema a pag 17
vengono usati 2 Shift register PISO (paralell in serial out)

dove in sequenza di spedizione
PISO 1:
D7,D6,D5: sono H (non portano informazione, ignorato dal display).
D4: L (Startbit)
D3,D2,D1,D0 Dati D0 a D4
PISO2:
D7,D6,D5,D4: dati D5 a D7
D3: Parity
D2,D1,D0 sono H (2 Stopbit)

Cosí risulta come spediti 16 bit:
H, H, H, Start, D0, D1, D2, D3, D4, D5, D6, D7, partity, Stop, Stop, Stop

Questo non si puó fare anche con 2 Byte spediti sulla SPI?
o mi sbaglio?

Ciao Uwe

uwefed:
Questo non si puó fare anche con 2 Byte spediti sulla SPI?
o mi sbaglio?

Da provare, però ho seri dubbi sul fatto che funzioni.

Non ho quel tipo di pulsante e percui non so provare.
Ciao Uwe

uwefed:
Non ho quel tipo di pulsante e percui non so provare.

Nemmeno io, inoltre sembrano essere molto costosi, qui li vendono a 37 E.

Esiste una libreria specifica per Arduino adatta a questi tasti, usa una emulazione software della seriale asincrona e permette di usare una coppia di pin generici.
Però leggendo sul sito del produttore la versione con la seriale sincrona è obsoleta, adesso c'è la versione con interfaccia SPI.

sai che sono mesi che sto cercando di farlo funzionare :slight_smile: ho provato a cercare su internet ma si vede che non abbastanza… lo schermo funziona
io ne ho una ventina di questi perche’ al lavoro, se un quadro passa di revisione… buttano via tutto quello che e obsoleto (cioe’ tutto! nuovo e a volte anche in cellofanato )
grazie mille!!!

denysmomo:
io ne ho una ventina di questi perche’ al lavoro,

Visto il prezzo al pubblico, al singolo pezzo, è un bel valore :slight_smile: