Indice del forum
Visita il sito Area SX
Area SX Divisione Elettronica
area di discussione e supporto tecnico

Informazioni e discussioni sui prodotti di Area SX
 
   CercaCerca     RegistratiRegistrati   ProfiloProfilo   LoginLogin 

Argomento: SX15-Evo, output da FLEX-ANALOG

 
Nuovo Argomento   Rispondi    Indice del forum -> Rabbit Hardware
Precedente :: Successivo  
Autore Messaggio
aldofad



Registrato: 04/02/07 20:14
Messaggi: 15

MessaggioInviato: Mar 13 Feb 13 2007 11:39    Oggetto: SX15-Evo, output da FLEX-ANALOG Rispondi citando

Ciao,
ho una SX15-Evo e una FLEX-ANALOG.
Rilevo correttamente temperatura e tensioni dei canali di input dalla FLEX-ANALOG, ma purtroppo non ho idea di come fare a produrre tensioni in uscita sui due canali disponibili.
Ho guardato l'esempio disponibile http://www.areasx.com/files/articoli/8143/SX15E_FLEXA.zip
ma per quanto riguarda l'output vedo solo queste define:
Codice:
// Output channel
#define STROBE        BitWrPortI(PBDR,&PBDRShadow,1,5);BitWrPortI(PBDR,&PBDRShadow,0,5)
#define CLOCK         BitWrPortI(PBDR,&PFDRShadow,1,4);BitWrPortI(PBDR,&PFDRShadow,0,4)
#define SET_DATA      BitWrPortI(PBDR,&PFDRShadow,1,7)
#define CLEAR_DATA    BitWrPortI(PBDR,&PFDRShadow,0,7)

Potreste cortesemente postare una funzioncina che per esempio produce 2V sui due canali per 2 secondi?
Magari è una banalità, ma purtroppo sono neofita al riguardo...

grazie mille
aldo
Torna in cima
Profilo Invia email HomePage MSN Messenger
battisti



Registrato: 16/09/04 08:31
Messaggi: 811

MessaggioInviato: Mer 14 Feb 14 2007 09:49    Oggetto: Rispondi citando

Non appena possibile lo faremo.
Le modifiche da fare sono piuttosto semplici: nella funzione PCF8591Read devi passare l'indirizzo con il bit meno significativo attivo, poi il byte di controllo impostato a 0x44 (invece che 0x04 come nella funzione di lettura) e poi trasmettere il valore da impostare sull'uscita D/A.
_________________
----------------------------------------
Area SX
Massimo Battisti
----------------------------------------
Torna in cima
Profilo Invia email HomePage
desantix



Registrato: 24/09/04 11:22
Messaggi: 890

MessaggioInviato: Mer 14 Feb 14 2007 10:47    Oggetto: Rispondi citando

Codice:

//FUNZIONE controllo DA
int write_PCF8591(unsigned char address, unsigned char buf) {
  i2c_stop();
  i2c_start();
  if (i2c_outbyte(0x90 | (address<<1))==0) {
    i2c_stop();
    printf("Ricevuto NACK 1\n");
    return -1;
  }
  if (i2c_outbyte(0x40)==0) {
    i2c_stop();
    printf("Ricevuto NACK 2\n");
    return -1;
  }
  if (i2c_outbyte(buf)==0) {
    i2c_stop();
    printf("Ricevuto NACK 3\n");
    return -1;
  }
  i2c_stop();
  return 1;
}


La funzione che ti ho postato l'ho scritta in in C per linux (FOX e SX ARM LinuX) puoi facilmente modificarla per rabbit.

alla variabile
unsigned char buf

devi passare un valore compreso tra 0 e 255


Ciao
Daniele
Torna in cima
Profilo HomePage
aldofad



Registrato: 04/02/07 20:14
Messaggi: 15

MessaggioInviato: Gio 15 Feb 15 2007 02:01    Oggetto: Rispondi citando

Grazie mille a entrambi della pronta risposta.
Vista la funzione di Daniele ho un altro problemino, come faccio a determinare l'address dei canali di uscita?

Ho consultato la documentazione http://www.areasx.com/files/articoli/8138/SX_Flex_Analog_Guide.pdf
e dato che ho S2:A1 aperto e S2:A2 chiuso, utilizzo gli indirizzi 0x02 e 0x03 e leggo correttamente. Però non vedo nulla sulla docum. per impostare l'address di out. Sicuramente mi sto perdendo qualcosa...

grazie ancora
aldo
Torna in cima
Profilo Invia email HomePage MSN Messenger
battisti



Registrato: 16/09/04 08:31
Messaggi: 811

MessaggioInviato: Gio 15 Feb 15 2007 09:33    Oggetto: Rispondi citando

L'indirizzo riguarda il Chip nella sua interezza, quindi l'address è lo stesso per i canali di ingresso e di uscita. Ogni chip gestisce 4 canali di ingresso (A/D) e 1 di uscita (D/A)
Quindi nel tuo caso avrai un D/A all'indirizzo 0x02 ed uno all'indirizzo 0x03.
_________________
----------------------------------------
Area SX
Massimo Battisti
----------------------------------------
Torna in cima
Profilo Invia email HomePage
aldofad



Registrato: 04/02/07 20:14
Messaggi: 15

MessaggioInviato: Gio 15 Feb 15 2007 11:26    Oggetto: Rispondi citando

Grazie mille!!
(e per la pazienza..)

Tutto funziona, ecco la funzione che adopero:
Codice:
int write_PCF8591(unsigned char address, unsigned char buf) {
   auto unsigned char cnt;
   auto short int err;
   i2c_stop_tx();
   // Invia lo START
   if (err=i2c_startw_tx()){
      i2c_stop_tx();
      return -10;   //ritorna il codice di errore -10
   }
   // Scrive l'indirizzo I2C e attende la risposta ACK dal dispositivo
   if (err=i2c_wr_wait(0x90 | (address<<1))){
      i2c_stop_tx();
      return -20;   //ritorna il codice di errore -20
   }
   if (err=i2c_write_char(0x40)){
      i2c_stop_tx();
      return -30;   //ritorna il codice di errore -30
   }
   if (err=i2c_write_char(buf)==0) {
       i2c_stop_tx();
       printf("Ricevuto NACK 3\n");
       return -1;
   }
   i2c_stop_tx();
   return 1;
}


Ora riesco correttamente ad impostare le tensioni sui due canali.
(A dire il vero la funzione ritorna -1 comunque funziona)

grazie ancora
aldo
Torna in cima
Profilo Invia email HomePage MSN Messenger
Mostra prima i messaggi di:   
Nuovo Argomento   Rispondi    Indice del forum -> Rabbit Hardware Tutti i fusi orari sono GMT + 1 ora
Pagina 1 di 1

 
Vai a:  
Non puoi inserire nuovi argomenti in questo forum
Non puoi rispondere agli argomenti in questo forum
Non puoi modificare i tuoi messaggi in questo forum
Non puoi cancellare i tuoi messaggi in questo forum
Non puoi votare nei sondaggi in questo forum


Powered by phpBB © 2001, 2002 phpBB Group