Initialisierungsfehler Hardware

Begonnen von pic18, 19.03.2023, 10:52:08 CET

Vorheriges Thema - Nächstes Thema

pic18

Hallo ich suche schon längere Zeit einen Fehler in meiner Schaltung / Programm. Ich möchte das Ihr mal darüber schaut, ob ich das richtig programmiert habe. Vielleicht bin ich Betriebsblind.

zur Schaltung: Ich habe 2 LCD Anzeigen 4x20 Zeichen an den Datenport D0 - D7 angeschlossen.

An diesen Datenport hängt auch noch ein USB Baustein FT245RL.
An FT245RL ist -RD und WR so angeschlossen:
-RD Port RE0
WR Port RE1

Mein Problem: Wenn ich über USB über den Bootloader mein Programm hochlade funktioniert alles einwandfrei. Auch wenn ich nach Start des Programms mein Laptop vom USB Port abziehe.

Wenn ich aber dann die Spannung wegnehme und wieder einschalte dann werden meine LCD Anzeigen nicht richtig konfiguriert bzw. ein fehlerhafter Text angezeigt.

da ich übers Internet auf die Schaltung zugreife habe ich den USB Port abgeschaltet. Anscheinend sendet aber der USB Baustein auf den Datenbus D0 - D7, womit die Daten verfälscht werden.

Ich habe
-RD auf 1
WR auf 0,
bei der Initialisierung der LCD Anzeigen, sowie zusätzlich bei jeder Enable Freigabe der LCD's gestellt, dadurch dürfte meiner Meinung nach der USB-Baustein nichts auf den Datenbus senden. Ist das auch eure Meinung, oder habe ich da einen Denkfehler?

Hier die Hardware Konfiguration:
/*********************** LCD *************************/
//_ff !USB_RD RE0, USB_WR RE1 hinzugefügt, da sonst Datenbusfehler wenn USB abgeschaltet
#define initLCDPort()    LATCbits.LATC0 = 1; \\
                        LATCbits.LATC1 = 1; \\
                        LATCbits.LATC2 = 0; \\
                        LATAbits.LATA2 = 0; \\
                        TRISCbits.RC0 = OUT; \\
                        TRISCbits.RC1 = OUT; \\
                        TRISCbits.RC2 = OUT; \\
                        TRISAbits.RA2 = OUT; \\
                        LATEbits.LATE0 = 1; \\
                        LATEbits.LATE1 = 0; \\
                        TRISEbits.RE0 = OUT; \\
                        TRISEbits.RE1 = OUT;

#define dataPortRead()    TRISD = 0xff; Nop();
#define dataPortWrite() TRISD = 0x00; Nop();

#define LCD_RS_PIN    LATCbits.LATC0  // 0-Instruction, 1- Data
#define LCD_RW_PIN    LATCbits.LATC1  // 0-Write, 1-READ
#define LCD0_E LATCbits.LATC2
#define LCD1_E LATAbits.LATA2

#define LCD_DATA_LATCH    LATD        // auch USB
#define LCD_DATA_PORT    PORTD        // auch USB

/*********************** USB *************************/
//
// PWREN, RXF, TXE sind INPUT
//
#if defined(BOARD_V1) | defined(BOARD_V2)
#define initUSBPort()    TRISAbits.RA4 = IN; \\
                        TRISBbits.RB6 = IN; \\
                        TRISBbits.RB7 = IN; \\
                        TRISEbits.RE0 = OUT; \\
                        TRISEbits.RE1 = OUT;

#define USB_PWREN    PORTAbits.RA4   // IN
#define USB_RXF        PORTBbits.RB6   // IN
#define USB_TXE        PORTBbits.RB7   // IN
#endif

//
// WR = 0, RD = 1 ist inaktiv
//
#define USB_RD        LATEbits.LATE0  // OUT
#define USB_WR        LATEbits.LATE1  // OUT
#define initUSBData()   USB_RD = 1; USB_WR = 0; 

#define USB_DATA_LATCH    LATD        // auch LCD
#define USB_DATA_PORT    PORTD        // auch LCDh

hier: LCD Enable
void LCDE_1(uint8_t LCDx)
{
    LATEbits.LATE0 = 1; //USB auf !RD
    TRISEbits.RE0 =0;
    switch(LCDx)
    {
        case 0: 
            LCD0_E =1;
        break;
        
        case 1:
            LCD1_E =1;    
        break;
    }    
    wait_1us( 5 );
}

// Enable=0
void LCDE_0(uint8_t LCDx)
{
    switch(LCDx)
    {
        case 0: 
            LCD0_E =0;
        break;
        
        case 1:
            LCD1_E =0;    
        break;
    }    
    wait_1us( 25 );
usb.pdf

pic18

Leider ist der Fehler immer noch da, ich dachte dieser wäre weg, aber was gut ist kommt wieder. :o
Die LCD-Anzeigen zeigen teilweise Müll an wenn ich die Spannung wegnehme und wieder zuschalte, sobald ich das Laptop am USB-Port anschließe funktioniert alles.
Mache ich in der Konfiguration einen Fehler. Ich bin der Meinung ich habe den Schreib und Lesezugriff des FT245RL gesperrt. Könnt Ihr hier einen (Denk-) Fehler erkennen?

pic18

Ich habe den Fehler jetzt gefunden, nach dem ich die ganze Schaltung zerlegt hatte und die Pegel mit dem Oszi gemessen habe. Die Spannung am Datenbus wurde tatsächlich herunter gezogen. Es lag an die fehlende 5V Verbindung zwischen VCIO und VCC. Das habe ich nur nicht ganz verstanden, da am VCIO ja 5 V anliegen. Das Problem war nur beim Anlegen der Versorgungsspannung da. Sobald alles initialisiert wurde hatte es keine Probleme mehr gegeben. Da ich am USB- Eingang nicht die volle 5V Spannung anlegen möchte, habe ich mich entschlossen einen 47Ohm Widerstand anstatt des Jumpers J15 zu setzen. Damit dürfte die Spannung an VCC ca. 4V betragen. Bei meiner Versuchsschaltung hatte ich einen Widerstand von 100 Ohm und eine Spannung von 3,2V.

Jetzt, da ich die Schaltung zerlegt habe, werde ich die verschiedenen CS bzw. Enable Leitungen mit einem seriellen IC 74HC595 über SPI schalten. Dadurch gewinne ich ein paar Portausgänge die ich für die Ansteuerung weiterer Hardware benötige. Das ganze geht leider auf Lasten der Geschwindigkeit. Ursprünglich wollte ich den Datenport mit einem 74373 erweitern. Ich habe aber keinen parallen IC gefunden, wo ich die Ausgänge zwischen speichern und später aktivieren kann.

picass

Zitat von: pic18 in 25.10.2023, 22:25:30 CESTIch habe den Fehler jetzt gefunden, nach dem ich die ganze Schaltung zerlegt hatte und die Pegel mit dem Oszi gemessen habe. Die Spannung am Datenbus wurde tatsächlich herunter gezogen. Es lag an die fehlende 5V Verbindung zwischen VCIO und VCC.
Da hatten wir ohne Schaltplan wohl kaum eine Chance, mal "drauf zu blicken".
Aber herzlichen Glückwunsch zum Fehlerfund. So was verschafft Glücksgefühle und vor allem ist die vorige investierte Arbeitszeit nicht umsonst gewesen.
Grüße, picass

pic18


Schnellantwort

Achtung: In diesem Thema wurde seit 120 Tagen nichts mehr geschrieben.
Wenn Sie nicht absolut sicher sind, dass Sie hier antworten möchten, starten Sie ein neues Thema.

Name:
Verifizierung:
Bitte lassen Sie dieses Feld leer:
Geben Sie die Buchstaben aus dem Bild ein
Buchstaben anhören / Neues Bild laden

Geben Sie die Buchstaben aus dem Bild ein:

Tastenkürzel: Alt+S Beitrag schreiben oder Alt+P für Vorschau