Sooo habsch selber herausgefunden! \/
Also: in der obrigen Formel bekomme ich für 10101011 (171/256)*5=3,33V heraus und daraus folgt:
1. gewünschte Spannung: 3,25/5=0,56
2. mit 256 multiplizieren und danach runden oder alles mit dem Windowsrechner rechnen => dort kann man sich gleich das Ergebnis in HEX oder BIN umwandeln lassen
3. kompilieren und es stimmt...fast![]()
Bei mir lese ich mit einem Multimeter 3,23V und nach Wandlung mit dem Chip 3,248V, was will man(n) mehr![]()
MATCode:'********************************************************** 'Programm : I2C-Ansteuerung PCF8591 'By : mat-sche@web.de 'Compiler : BASCOM-AVR 1.11.9.1 'Hardware : Mega läuft als Master holt ' Daten über I2C vom ADC ' 'Board : kleines 'Chip type : MEGA32 '********************************************************** $regfile = "m32def.dat" ' specify the used micro $crystal = 8000000 ' used crystal frequency $baud = 19200 ' use baud rate $hwstack = 150 ' default use 32 for the hardware stack $swstack = 150 ' default use 10 for the SW stack $framesize = 40 ' default use 40 for the frame space '$sim $lib "i2c_twi.lbx" '-----------------2x16 LCD Display an Port c =>Conector ------------------------------------------------------------------------------------------------- Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2 ' Pinbelegung "LCD-Port)" ' SV8 6 5 4 3 7 8 ' Pinbelegung SV9 Board Config Lcd = 16 * 2 Config Porta = Output Config Lcdbus = 4 Initlcd Print "Start" Cursor Off Noblink ' Cursor und Blinken abschalten. Cls '------------------------------------------------------------------------------- Config TWI Config Twi = 100000 ' Init TWBR und TWSR ' TWI gleich einschalten, das macht Bascom ansonsten erst beim I2CStart ! Twcr = &B00000100 ' nur TWEN setzen Config Sda = Portc.1 'SDA und SCL als Hardware-TWI definieren Config Scl = Portc.0 Const Pcf8591write = &H90 'PCF TWI Adresse zum schreiben des Controlbyts Const Pcf8574read = &H91 'PCF TWI Adresse zum Auslesen der Datenbyts Ddra = &B00000000 ' PortA wird als Eingang verschalten '------------------------------------------------------------------------------- Config Variablen Dim U_wert As Single ' Variablen Dim Dat As Byte Dim Lcd_text As String * 5 '------------------------------------------------------------------------------- Config Controllbyte PCF I2cstart I2cwbyte Pcf8591write 'Schreibadresse senden I2cwbyte &B00000000 'Kontrollbyte '1. immer null '2. 1= Analog Out enable ' '3-4. Messwahl: 00= single input; 01= 3 differential input; 10= kanal 0&1= single end, kanal 2&3= differential; 11= 2 differntial inputs '5.immer null '6. 1= Autoincrement Flag an (nach jedem Acknowled wird eine Wandlung vom nächsten Kanalangestoßen) '7-8.A/D Kanalnummer: 00=cha0; 01=cha1; 10=cha2; 11=cha3 I2cstop 'TWI Übertragung abgeschlossen Do '------------------------------------------------------------------------------- A/D Kanal 0 auslesen nach Tastendruck If Pina.7 = 1 Then 'nach jeden Tastendruck PCF8591 Analogwert auslesen I2cstart I2cwbyte Pcf8574read ' Leseadresse übermitteln I2crbyte Dat , Ack 'Dummy => benötigt da ja nach jedem Ack erst die vorhergehende Wandlung gesendet wird; Ack bedeutet dass noch weitere Datenbyts abgefragt werden I2crbyte Dat , Nack 'Messwert von kanal0, Nack=> es wird kein weiteres Datenbyte abgefragt I2cstop ' Print " Wertdat = " ; Dat Print Err 'TWI übermittlung OK? 1= nein, 0= i.O. End If U_wert = Dat * 5 U_wert = U_wert \ 254 Lcd_text = Fusing(u_wert , "#.###") 'FUSING returns a formatted string of a single value. 'Cls Locate 1 , 1 Lcd " U-Wert " ; Lcd_text Locate 2 , 1 Lcd " Wert_Dat= " ; Dat '------------------------------------------------------------------------------- D/A Kanal Spannung ausgeben auf Tastendruck If Pina.6 = 1 Then I2cstart I2cwbyte Pcf8591write 'Schreibadresse senden I2cwbyte &B01000000 'Kontrollbyte '1. immer null '2. 1= Analog Out enable ' '3-4. Messwahl: 00= single input; 01= 3 differential input; 10= kanal 0&1= single end, kanal 2&3= differential; 11= 2 differntial inputs '5.immer null '6. 1= Autoincrement Flag an (nach jedem Acknowled wird eine Wandlung vom nächsten Kanalangestoßen) '7-8.A/D Kanalnummer: 00=cha0; 01=cha1; 10=cha2; 11=cha3 I2cwbyte &HA6 , Nack I2cstop End If Loop End







Zitieren
Lesezeichen