Microcontrollori XMega e DALI

Sezione dedicata ai Microcontrollori e ai Sistemi Embedded

Microcontrollori XMega e DALI

Postby hedgefox » 30 Jun 2015, 10:51

Ciao a tutti, è il mio primo post in questo forum ed ho poca esperienza nel campo dei microcontrollori.

Abbiamo a disposizione un ATXMega256A3U e dobbiamo implementare il protocollo DALI. Ho cercato e trovato sul sito di Atmel un'application Note per il micro XMega32E che però usa i moduli XCL, sono presenti nel nostro chip e quindi non posso fare dei test approfonditi. Questo è stato confermato da Atmel assieme al fatto che al momento non hanno esempi utili di DALI per gli altri XMega.

A questo punto mi rivolgo a voi :)

Avete da condividere qualche esempio di uso del protocollo DALI sugli Xmega? Sapete darmi qualche sito su come usare DALI? In particolare non mi è chiaro come inviare un comando ad un indirizzo.

Grazie e a presto

Luca
hedgefox
 
Posts: 5
Joined: 30 Jun 2015, 10:09

Re: Microcontrollori XMega e DALI

Postby Leonardo » 30 Jun 2015, 23:05

Ciao hedgefox e benvenuto al forum,

Fammi indovinare il modulo XCL è utilizzato per realizzare la codifica Manchester tramite XOR tra dati e clock?
Il mio blog di elettronica: http://electro-logic.blogspot.it
User avatar
Leonardo
 
Posts: 502
Joined: 29 May 2013, 22:31
Location: Parma

Re: Microcontrollori XMega e DALI

Postby hedgefox » 01 Jul 2015, 12:15

Ciao Leonardo,

ammetto la mia ignoranza in merito... da quanto ho visto googlando in giro credo che le due cose siano effettivamente legate.

Ad Atmel ho chiesto se fosse possibile usare DALI senza i moduli XCL e mi hanno detto che la stessa cosa si può implementare usando il timer e l'interrupt esterno. Non capisco però a cosa si riferiscono

Io ho trovato questo sito che spiega come mandare dati in DALI
http://www.microst.it/Tutorial/dali_4.html

Secondo questo tutorial, se io invio questa stringa di bit, dovrei riuscire ad ottenere il seguente risultato

1000000100101010100
Luce DALI all'indirizzo 1 accenditi direttamente alla potenza 85

Ovvero

1 (bit di start)
0 (voglio un indirizzo, non un gruppo)
000001 (Voglio l'indirizzo 1)
0 (Non passo un comando, voglio modificare direttamente il valore della luce)
01010101 (Valore della luminosità = 85)
00 (Bit di fine)

Però chiaramente non devo mandarli tramite seriale e basta ma devo usare la codifica Manchester per farli accettare dallo Slave Dali. Corretto? Sono sulla strada giusta?

Quello che mi chiedo adesso è come implementare la codifica Manchester usando interrupt e timer, perché la codifica in se proprio non mi è chiara... nel frattempo proverò a fare altri test.

Se qualcuno nel frattempo può riportarmi sulla retta via (se sto sbagliando qualcosa) o mi sa indicare dove cercare se sono sulla strada giusta mi farebbe un gran favore :)
hedgefox
 
Posts: 5
Joined: 30 Jun 2015, 10:09

Re: Microcontrollori XMega e DALI

Postby Leonardo » 01 Jul 2015, 12:31

Ciao Luca,

Banalmente puoi implementare con un IC discreto di logica XOR la codifica Manchester, ai due ingressi applichi il clock e i dati, prova a leggere attentamente https://en.wikipedia.org/wiki/Manchester_code

Senza usare componenti aggiuntivi puoi fare tutto col micro, il che richiede però un po di programmazione.

Cosa controlli di bello col DALI? Qualche scenografia particolare?
Il mio blog di elettronica: http://electro-logic.blogspot.it
User avatar
Leonardo
 
Posts: 502
Joined: 29 May 2013, 22:31
Location: Parma

Re: Microcontrollori XMega e DALI

Postby hedgefox » 02 Jul 2015, 15:11

Al momento solo dei test con una lampada che ho sottomano. Poi chissà, a seconda di cosa ci combino potrei portarla altrove :) mi piacerebbe provare a usarla in ambienti teatrali con programma sviluppato apposta.

Non mi è chiara però come eseguire la codifica Manchester.
Io ho calcolato che per ordinare al DALI di portare la luce al 75% devo mandare il segnale 1000000100100101100 ricavato secondo lo schema riportato in precedenza. Pensavo di poter mandare tramite seriale questo segnale. Sbaglio? Bisogna usare la codifica Manchester per forza? Perché ho provato a leggere l'articolo di Wikipedia ed informarmi altrove, ma non ho capito come implementarla sul mio Xmega. Devo portare il BAUD della seriale a 1200 e alzare / abbassare il pin di trasmissione a intervalli regolari per creare il segnale? Stessa cosa per ricevere eventuali dati di risposta?

Perdona la niubbaggine ;)
hedgefox
 
Posts: 5
Joined: 30 Jun 2015, 10:09

Re: Microcontrollori XMega e DALI

Postby Leonardo » 02 Jul 2015, 15:46

Sono un po di fretta e ti rispondo al volo, fai lo XOR con il clock quindi quando varia il clock (due volte per periodo) l'uscita può variare. Guarda i diagrammi su wikipedia, sono molto chiari.
Il mio blog di elettronica: http://electro-logic.blogspot.it
User avatar
Leonardo
 
Posts: 502
Joined: 29 May 2013, 22:31
Location: Parma

Re: Microcontrollori XMega e DALI

Postby deluca » 03 Jul 2015, 10:48

Intanto devi codificare il tuo dato 100.0000.1001.0010.1100 (19bit) che equivale a x"4092C" in codice manchester....
gli zeri diventano 01 mentre l'uno diventa 10 ... quindi procediamo

"1 0 0 1 0 1 0 1 0 1 0 1 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1 0 0 1 1 0 1 0 0 1 0 1"
fare ciò mi sembra molto semplice e quindi non scendo nei dettagli...

ora configura il timer in modo da generare un int ogni periodo pari all'equivalente periodo/bit del baudrate.
Se è di 1200 baud dobbiamo generare un int ogni 833.33uSec. (416uS se già codificato).

Trasmetti ad ogni int i bit generati dalla codifica manchester.
Questo lo fai attraverso un pin del micro e non necessariamente usando il pin TXD della seriale...

Ps. Se non ricordo male, ci sarebbe il bit di start e 2 bit di stop....
dali.png
dali.png (215.17 KiB) Viewed 4752 times


ecco un link interessante:
http://www.atmel.com/images/doc9164.pdf
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: Microcontrollori XMega e DALI

Postby hedgefox » 07 Jul 2015, 17:47

Grazie per le risposte!

Sono un po' andato avanti con il progetto ma ancora non sono riuscito a combinare niente... il brutto è che non capisco cosa sbaglio, perché almeno in teoria il protocollo DALI l'ho capito.

Facciamo il punto.

Ho una funzione che riempie un array di 19 caratteri con il comando DALI che è coerente con quello descritto da Giovanni.
Un'altra funzione riempie un array di 38 caratteri e viene riempita analizzando l'array precedente

Questo è il risultato

DALI ADDRESS: 1
DALI VALUE: 60

DALI COMMAND
1 0 0 0 0 0 0 1 0 0 0 1 1 1 1 0 0 1 1
MANCHESTER TRANSMISSION
1 0 0 1 0 1 0 1 0 1 0 1 0 1 1 0 0 1 0 1 0 1 1 0 1 0 1 0 1 0 0 1 0 1 1 0 1 0

Veniamo alla parte spinosa.

Ho creato questa funzione per eseguire la trasmissione

Code: Select all
void domanchester_new()
{
   for (int i = 0; i <= 37; i++)
   {
      transmit_new(i);
      delay_us(833);
   }
}

Questa è la funzione che uso per trasmettere i dati (dalitransmission è l'array da 38 caratteri, DALI_TX è il pin con cui trasmetto il codice manchester)

Code: Select all
void transmit_new(int counter)
{
   if (dalitransmission[counter] == '0')
   {
      ioport_set_pin_level(DALI_TX, IOPORT_PIN_LEVEL_LOW);
   }
   else
   {
      ioport_set_pin_level(DALI_TX, IOPORT_PIN_LEVEL_HIGH);
   }
}


Nel dubbio ho provato anche a fare lo standard IEEE 802.3 invertendo gli 0 con gli 1, ma senza fortuna.

C'è qualcosa di palese che sbaglio?

Grazie di nuovo!
hedgefox
 
Posts: 5
Joined: 30 Jun 2015, 10:09

Re: Microcontrollori XMega e DALI

Postby deluca » 08 Jul 2015, 08:21

asp uhm!!

833uSec è il tempo che il duetto di bit codificato impiega con un baudrate di 1200 baud.
Ora in realtà, se consideriamo il singolo bit dopo la codifica M , la durata di tale bit dovrà essere di 416uSec.

Infatti se vedi il bit di start nel suo complessivo dura 833uSec ma in questi 833uSec assume il valore zero per 416us e il valore uno per altri 416uSec.

altra cosa ....

il bit di start che precede il codice addr e data deve assumere il valore zero per 416us e il valore uno per altri 416us.
i 2 bit di stop finali non devono essere codificati e devono stare sempre a uno ..
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: Microcontrollori XMega e DALI

Postby hedgefox » 08 Jul 2015, 16:03

Ok grazie, quindi questa nuova struttura dovrebbe essere corretta? Perché ho provato a mandare il comando DALI così ma ancora non riesco a vedere il dimmeraggio della lampada dal 60% al 100% e viceversa...

Comando - bit1 bit 2 Descrizione

DALI Address: 1
ARC Direct value to 60

1 - 0 1 START BIT
0 - 0 1 SHORT ADDRESS / GROUP - BROADCAST
0 - 0 1 ADDRESS 0
0 - 0 1 ADDRESS 1
0 - 0 1 ADDRESS 2
0 - 0 1 ADDRESS 3
0 - 0 1 ADDRESS 4
1 - 1 0 ADDRESS 5
0 - 0 1 DIRECT ARC / COMMAND
0 - 0 1 COMMAND 0
0 - 0 1 COMMAND 1
1 - 1 0 COMMAND 2
1 - 1 0 COMMAND 3
1 - 1 0 COMMAND 4
1 - 1 0 COMMAND 5
0 - 0 1 COMMAND 6
0 - 0 1 COMMAND 7
1 - 1 STOP BIT 0
1 - 1 STOP BIT 1


Address: 1
ARC Direct value to 100

1 - 0 1 START BIT
0 - 0 1 SHORT ADDRESS / GROUP - BROADCAST
0 - 0 1 ADDRESS 0
0 - 0 1 ADDRESS 1
0 - 0 1 ADDRESS 2
0 - 0 1 ADDRESS 3
0 - 0 1 ADDRESS 4
1 - 1 0 ADDRESS 5
0 - 0 1 DIRECT ARC / COMMAND
0 - 0 1 COMMAND 0
1 - 1 0 COMMAND 1
1 - 1 0 COMMAND 2
0 - 0 1 COMMAND 3
0 - 0 1 COMMAND 4
1 - 1 0 COMMAND 5
0 - 0 1 COMMAND 6
0 - 0 1 COMMAND 7
1 - 1 STOP BIT 0
1 - 1 STOP BIT 1
hedgefox
 
Posts: 5
Joined: 30 Jun 2015, 10:09


Return to Microcontrollori e microprocessori

Who is online

Users browsing this forum: No registered users and 1 guest

cron