INFO - FAQ - CC2-Forum - CCPro-Forum |
|
Hallo O-Macro Experten, bei folgendem Programm s. u. das mittlerweile funktioniert habe ich 3 Fragen: 1. Frage: Habe versucht eine 10 Bit AD Wandlung vom Port AD6 zu bekommen. Sobald ich jedoch im P-Code INCLUDE "extports.iia" einfuege, erfolgt nur noch eine 8 Bit Wandlung. Wobei mir die 8 Bit fuer meine Anwendung genuegen! Anscheinend blockiert INCLUDE "extports.iia" eine 10 Bit Wandlung. Es ist dabei egal ob PULLUPA = &b011111 und ADCLK=ADCLK AND &b11110011 OR &b0100 'MODE1 loeschen, MODE0 setzen jeweils aktiviert oder deaktiviert sind. 2. Frage: Wenn INCLUDE "extports.iia" nach den Zeilen von PULLUPA = &b011111 und ADCLK=ADCLK AND &b11110011 OR &b0100 'MODE1 loeschen, MODE0 setzen eingefuegt wird, startet das Programm nicht. Warum blockiert die AD Port Definition den Start des Programms 3. Frage: INCLUDE "extports.iia" erlaubt ja die Nutzung von bis zu 8 PCF8574. Im P-Code von extports.iia steht am Anfang DEFINE PCFADR &b01000000 'I2C-Basisadresse aller PCF8574== A2:A1:A0 ==0:0:0 Wie werden die Adressen der anderen PCF8574 beruecksichtigt. Wo wird die Definition pcf8 BYTEPORT[12] 'Adrresse 1:1:1 im P-Code von extports.iia abgefragt. Benutzt wird im P-Code von extports.iia immer nur #PCFADR 'I2C-Basisschreibadresse Leider reichen meine ASM Kenntnisse nicht aus zu verstehen, wie Dietmar das gelöst hat. freundliche Grüße Joe Fenk ########## P-Code ################################# ' P2P3NAD6.BAS ist identisch zu P2P3_AD6 jedoch PCF8574 2-ter zugefuegt ' ' -------------------------------------------------------------------------- ' LCD ueber I2C-Bus mittels Portexpander PCF8574 ansteuern ' In OCBASIC fuer Open-Macro von Dietmar Harlos. ' --------------------------------------------------------------------------- ' Das LCD ist mit dem PCF auf die gleiche Weise verbunden wie auf dem ' I2C-LCD von Conrad Electronic (Bestellnr. 198330). ' PCF8574 mit Verbindung an PTA4 (PORT[5], SCL =gruen Leitung) und ' PTA5 (PORT[6], SDA= gelb Leitung) zu Open-Macro ' ' PCF8574 | LCD Belegung ' ---------------------------------------------------------------------- ' P0 4 | DB4 11 \ ' P1 5 | DB5 12 \ die oberen 4 Bits ' P2 6 | DB6 13 / vom 8-Bit-Datenbus ' P3 7 | DB7 14 / ' P4 9 | R/W 5 -- Lesen (1) oder Schreiben (0) ' P5 10 | RS 4 -- Daten (1) oder Instruktion (0) uebermitteln ' P6 11 | EN 6 -- Daten bei fallender Flanke (1 nach 0) uebernehmen ' P7 12 | EN2 -- reserviert fuer 2. Enable-Leitung einiger LCDs ' --------------------------------------------------------------------------- INCLUDE "OMAC.DEF" 'OMACRO Include Datei vom 20.4.2010 DEFINE a,b,c BYTE 'ein paar Variablen DEFINE temp BYTE 'fuer LCD-Routinen DEFINE Me_AD6 WORD ' ----- Defintion der Ein_/Ausgabe Ports 'define TXD port[1] '**Datenausgabeport zur Ueberwachung am PC DEFINE ADC6 ad[6] ' Definition der LCD Ports ' nur wenn diese LCD-Definitionen vorhanden sind meldet Entwicklung/Basic-Compiler ' keinen Fehler DEFINE lcd_port BYTEPORT[5] 'das LCD ist am Extended Byteport angeschlossen DEFINE lcd_db4 PORT[33] '\ DEFINE lcd_db5 PORT[34] ' \ die oberen 4 Bits DEFINE lcd_db6 PORT[35] ' / vom 8-Bit-Datenbus DEFINE lcd_db7 PORT[36] '/ DEFINE lcd_rw PORT[37] 'Read/Write-Leitung DEFINE lcd_rs PORT[38] 'Daten/Instruktion-Leitung DEFINE lcd_e PORT[39] 'Enableleitung DEFINE pcf8 BYTEPORT[12] 'A2:A1:A0 = 1:1:1 DEFINE pcf8_p0 PORT[89] 'die einzelnen Ports des achten PCF8574 DEFINE pcf8_p1 PORT[90] DEFINE pcf8_p2 PORT[91] DEFINE pcf8_p3 PORT[92] DEFINE pcf8_p4 PORT[93] DEFINE pcf8_p5 PORT[94] DEFINE pcf8_p6 PORT[95] DEFINE pcf8_p7 PORT[96] ' --------------------------------------------------------------------------- ' Die Erweiterung fuer Extended Ports einbinden ' --------------------------------------------------------------------------- INCLUDE "extports.iia" 'nur wenn extports vor der Definition der 'Portwiderstaende u ADCLK steht startet Programm 'aber nur mit aufloesung 8 Bit 'ohne extports hat man aufloesung 10 Bit ' --------------------------------------------------------------------------- ''***** Portwiderstaende = 26kOhm s.S. 63 Manual; abschalten um ADC Fehler zu reduzieren PULLUPA = &b011111 ' Pin4/Port6/AD6==Mota_AD3; ' Eingangsport zusaetzlich mit 1uF abblocken ' Pullup Widerstaende werden abgeschaltet, damit AD Messung genauer ist ' alle Eingeschaltet = &b111111; 1= eingeschaltet;0=aus '************************************ ' Bits im ADC10 Clock Register (ADCLK): ' ADLPC ADIV1 ADIV0 ADICLK MODE1 MODE0 ADLSMP ACLKEN ADCLK=ADCLK AND &b11110011 OR &b0100 'MODE1 loeschen, MODE0 setzen 'ADCLK=&b00110110 ' 10bit aufloesung einschalten ' --------------------------------------------------------------------------- 'INCLUDE "extports.iia" 'wenn das nach PULLUPA = &b011111 und 'ADCLK=ADCLK AND &b11110011 OR &b010 steht, startet Programm nicht ' --------------------------------------------------------------------------- ' Das Hauptprogramm ' --------------------------------------------------------------------------- #main URTOK=ON 'Erweiterung Extended Ports aktivieren, ohne werden PCF nicht 'genutzt u. Programm laeuft nicht richtig ab PrintSpc=ON End2Host=ON PRINT "P2P32NAD6.BAS" PrintSpc=ON End2Host=ON WHILE TRUE 'GOTO AD_T lcd_cls Pause 100 lcd_init 'I2C-Bus initalisieren, PCF anmelden, Pause 1 ' 1. Zeile beschreiben lcd_writecmd &h80 'Kommando "Set DD-RAM address" zum LCD senden lcd_writechar "P" '1 lcd_writechar "2" '2 lcd_writechar "P" '3 lcd_writechar "5" '4 lcd_writechar "2" '5 lcd_writechar "x" '6 lcd_writechar "1" '7 lcd_writechar "6" '8 lcd_writechar " " '9 lcd_writechar "L" '10 lcd_writechar "C" '1 lcd_writechar "D" '2 lcd_writechar "t" '3 lcd_writechar "e" '4 lcd_writechar "s" '5 lcd_writechar "t" '6 ' 2. Zeile beschreiben lcd_writecmd &hc0 'Kommando "Set DD-RAM address" zum LCD senden lcd_writechar "P" '1 lcd_writechar "o" '2 lcd_writechar "w" '3 lcd_writechar "e" '4 lcd_writechar "r" '5 lcd_writechar "t" '6 lcd_writechar "i" '7 lcd_writechar "p" '8 lcd_writechar "P" '9 lcd_writechar "C" '10 lcd_writechar "1" '1 lcd_writechar "6" '2 lcd_writechar "0" '3 lcd_writechar "2" '4 lcd_writechar "-" '5 lcd_writechar "E" '6 #AD_T 'AD Test Me_AD6=ADC6 PRINT "Me_AD6=";Me_AD6,"ADC6=";ADC6, "ADRH=";ADRH,"ADRL=";ADRL 'High und Low-Byte der letzten AD-Messung PRINT "LCD_PORT:";lcd_port PRINT "PCF_2:"; pcf8 ' vorher pcf8_p3 Pause 250 PRINT "PCF_2=OFF==Low==PCF_2 LED leuchten" pcf8=OFF 'vorher pcf8_p3=OFF 'PO auf Low PRINT "PCF_2=OFF:";pcf8 PAUSE 250 PRINT "PCF_2=ON==high==PCF_2 LED leuchten nicht" pcf8=ON 'vorher pcf8_p3=ON PRINT "PCF_2=ON:";pcf8 PAUSE 250 Pause 255 i2c_stop 'schliesslich PCF vom I2C-Bus abmelden WEND END ' --------------------------------------------------------------------------- ' Die LCD-Routinen haben die gleiche Struktur wie auf der C-Control 1.1 ' --------------------------------------------------------------------------- PROCEDURE lcd_init 'Vorgeschriebene Verzoegerung fuer das LCD PAUSE 2 '8-Bit-Modus aktivieren lcd_writecmd &h38 'mit 8-Bit-Command in 4-Bit-Modus umschalten lcd_port=&b01000010 'EN auf high lcd_e=OFF 'ab jetzt 4-Bit-Modus lcd_writecmd &h28 lcd_writecmd &h0c 'LCD loeschen lcd_cls RETURN END PROCEDURE PROCEDURE lcd_cls lcd_writecmd &h02 lcd_writecmd &h01 RETURN END PROCEDURE PROCEDURE lcd_writecmd(temp) lcd_port=temp shr 4 or &b01000000 'High-Nibble, EN auf high lcd_e=OFF lcd_port=temp and &h0f or &b01000000 ' Low-Nibble, EN auf high lcd_e=OFF RETURN END PROCEDURE PROCEDURE lcd_writechar(temp) lcd_port=temp shr 4 or &b01100000 'High-Nibble, EN auf high lcd_e=OFF lcd_port=temp and &h0f or &b01100000 ' Low-Nibble, EN auf high lcd_e=OFF RETURN END PROCEDURE ' --------------------------------------------------------------------------- ' Die von "extports.iia" benoetigten INCLUDE-Dateien einbinden ' --------------------------------------------------------------------------- ' --------------------------------------------------------------------------- ' Die I2C-Routinen einbinden, welche Byteport[1] u Pin4=Port6=SDA u Pin5=Port5=SCL ' --------------------------------------------------------------------------- 'INCLUDE "om_i2c.pro" 'dies benutzen, wenn man Pin4/Port6/SDA uPin5/Port5/SCL benutzt ' --------------------------------------------------------------------------- ' Die I2C-Routinen fuer BYTEPORT[2] einbinden & Pin6=Port14=SDA u. Pin7=Port13=SCL ' --------------------------------------------------------------------------- 'INCLUDE "om_i2c_b.pro" 'dies benutzen, wenn man Pin6/Port14/SDA u Pin7/Port13/SCL ' --------------------------------------------------------------------------- ' Die I2C-Routinen fuer BYTEPORT[2] einbinden & Pin2=Port16=SDA u. Pin3=Port15=SCL ' --------------------------------------------------------------------------- INCLUDE "om_i2c_c.pro" 'dies benutzen, wenn man Pin6/Port14/SDA u Pin7/Port13/SCL ' --------------------------------------------------------------------------- ' Die Firmware-Routinen einbinden ' --------------------------------------------------------------------------- INCLUDE "om_fw.pro" |
Antwort schreiben |