hallo alle miteinander nachdem mein LCD in 4bit und auch die tastatur abfrage nicht zulätz durch eure hilfe einwandfrei funktioniert, hab ich mich an was neues rangetraut.
und zwar das LCD03
datenblatt: das ist alles was ich dazu hab?!
http://www.robot-electronics.co.uk/htm/Lcd03tech.htm
da ist auch ein beispiel gezeigt, aber irgendwie haut es bei mir nicht hin.
evtl hat ja jemand schon erfahrung damit und kann mir eine hilfestellung geben.
ich vermute das mein programmcode fehlerfaft ist, aber ich weis nicht wo ich noch suchen soll.
hab das prog soweit runter gekürzt das jetzt laut datenblat (und in anlehnung and das demo prog) nur noch ein blinkender courser auf dem LCD angezeigt werden sollte.
würde mich freuen wenn sich einer mal mein prog anschauen könnte und evtl noch nen tipp hätte.
und dann hätte ich noch eine frage:Code://Microchip C-18 Compiler //PIC 18F4550 #include <p18f4550.h> #include "typedef.h" #include <stdio.h> #include <delays.h> #pragma code uint8 s[21]; // buffer used to hold text to print /**delay for PicLSBK (16MHz Taktzyklus = 4 MHz Befehlszyklus)***************/ void delay100us(uint8 multiplikator) { while(multiplikator--) Delay10TCYx(40); //40*10*0,25µs = 100 µs } /****************************************************************************/ void clrscn(void) { PIR1bits.SSPIF = 0; // //Start-Bedingung ausgeben SSPCON2bits.SEN = 1; // Start-Bedingung ausgeben (Start-Bit) while(!PIR1bits.SSPIF); // warte bis fertig Nop(); PIR1bits.SSPIF = 0; // Fertig-Anzeige löschen //Slave_Empfangs-Adresse senden SSPBUF = 0xc6; // LCD03 I2C address while(!PIR1bits.SSPIF); // warte bis fertig Nop(); PIR1bits.SSPIF = 0; // Fertig-Anzeige löschen SSPBUF = 0; // address of register to write to while(!PIR1bits.SSPIF); // warte bis fertig Nop(); PIR1bits.SSPIF = 0; // Fertig-Anzeige löschen SSPBUF = 12; // clear screen while(!PIR1bits.SSPIF); // warte bis fertig Nop(); PIR1bits.SSPIF = 0; // Fertig-Anzeige löschen SSPBUF = 5; // cursor on while(!PIR1bits.SSPIF); // warte bis fertig Nop(); PIR1bits.SSPIF = 0; // Fertig-Anzeige löschen //Stop-Bedingung ausgeben SSPCON2bits.PEN = 1; // Stop-Bedingung ausgeben (Stop-Bit) while(!PIR1bits.SSPIF); // warte bis fertig Nop(); PIR1bits.SSPIF = 0; // Fertig-Anzeige löschen } void i2c_init(void) { // INTCON2bits.RBPU=0; // pull-up's an delay100us(250); TRISBbits.TRISB0 = 1; // SDA (RB0) Eingang TRISBbits.TRISB1 = 1; // SCL (RB1) Eingang // PORTB=0xff; delay100us(10); SSPCON1 = 0b00111000; // x,x,I2C ein,x,I2C Master [Takt= Fosc /(4*(SSPADD+1))] SSPCON2 = 0; // Bestätigungsbit nach Empfang 0=an SSPSTATbits.SMP = 1; // Anstiegskontrolle 1=aus (Flankensteilheit) SSPSTATbits.CKE = 0; // I2C Betrieb / (SMBus gespert) SSPADD =0x09;// Bustakt 100kHz (bei 4MHz Befehlszyklus) delay100us(250); // wait 15ms for LCD03 to init delay100us(250); } void main(void) { i2c_init(); // sets up the PIC16F877 I2C port clrscn(); // clears the LCD03 disply while(1); // just stops }
kann ich die internen pullup widerstände des pic als pullup für den I2C bus verwenden?
aktuel hab ich 2,2kohm eingelötet.
vielen dank im voraus
mfg andi







Zitieren

Lesezeichen