Der Nachfolger des WDR-Computerclub mit Wolfgang Back und Wolfgang Rudolph - ...und immer ein Bit übrigbehalten!


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 O-Macro AD 8 bzw 10 Bit mit/ohne extports.iia Kategorie: Open-Micro/Open-Mini/Open-Midi/Open-Macro/Open-Maxi (von Joe Fenk - 3.10.2018 23:56)
Joe Fenk nutzt:  CC1-M-Unit V1.1, Open-Micro, Open-Macro
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
  PRINT "LCD_PORT:";lcd_port
  PRINT "PCF_2:"; pcf8  ' vorher pcf8_p3
  Pause 250
  PRINT
  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

Bisherige Antworten:

Re: O-Macro AD 8 bzw 10 Bit mit/ohne extports.iia (von Dietmar - 4.10.2018 0:43)
    Re: O-Macro AD 8 bzw 10 Bit mit/ohne extports.iia (von Joe Fenk - 4.10.2018 12:15)