LCD Ansteuerung - Kann Fehler nicht finden

OP #3294414
Lesenswert?

Hallo,

ich wende mich jetzt doch an euch. Denn ich kann den Fehler nicht 
finden. Es handelt sich um das zweite Display das ich verbauen möchte. 
Mit dem ersten ging alles super. Ein halbes Jahr später gibt es 
Probleme.

Ich habe nun ein zweites Board gebaut um alles zu prüfen. Wieder 
Fehlschläge. Ich bin sicher, wenn ihr den Output seht, dann fallen euch 
zig Gründe ein woran es liegen kann, die ich noch nicht geprüft habe, 
obwohl ich schon 8 mach durch alles durchgegangen bin.

Ich bin am Ende meine Ideen und frage höflich nach Debugging-Tipps und 
Ideen.

Ich benutze die Lib von Peter Fleury. RW habe ich verbunden.
Das "lustige" ist, er kommt durch die Initialisierungs-Methode durch. 
Doch er zeigt leider nichts an!
Ich hänge euch mal das Bild vom Display ran.

Hier die Belegung:
1
#define   LCD_PORT        PORTD
2
#define   LCD_DATA0_PORT  LCD_PORT
3
#define   LCD_DATA1_PORT  LCD_PORT
4
#define   LCD_DATA2_PORT  LCD_PORT
5
#define   LCD_DATA3_PORT  LCD_PORT
6
#define   LCD_DATA0_PIN   0
7
#define   LCD_DATA1_PIN   1
8
#define   LCD_DATA2_PIN   2
9
#define   LCD_DATA3_PIN   3
10
#define   LCD_RS_PORT     PORTD
11
#define   LCD_RS_PIN      4
12
#define   LCD_RW_PORT     PORTD
13
#define   LCD_RW_PIN      6
14
#define   LCD_E_PORT      PORTD
15
#define   LCD_E_PIN       5

Und dies ist meine Testroutine:
1
//
2
//  main.c
3
//  AnalyserDude
4
//
5
//  Created by Peter Shaw
6
//  Copyright (c) 2013. All rights reserved.
7
//
8

9
#include <stdlib.h>
10
#include <stdbool.h>
11

12
#include <util/delay.h>
13
#include <avr/io.h>
14
#include <avr/interrupt.h>
15

16
#include "../src-lib/lcd/lcd.h"
17

18
#define LIGHT_ON(l)                     (PORTB |= (l))
19
#define LIGHT_OFF(l)                    (PORTB &= ~(l))
20
#define LIGHT_TOGGLE(l)                 (PORTB ^= (l))
21

22
int i;
23

24
// DUMMY FUNCTION
25
// ---------------------------------------------
26
void *dummy(void){return (void *) NULL;};
27

28
/**
29
 * Initialize the lcd and printout a welcome message
30
 */
31
void initialize_lcd(void){
32
  LIGHT_ON(1<<PB1);
33
    lcd_init(LCD_DISP_ON);                                      // initialize display, cursor off
34
    LIGHT_OFF(1<<PB1);
35
    
36
    lcd_puts("XOXOXOXOXOXOXOXO\n");                             // welcome message
37
    lcd_puts("OXOXOXOXOXOXOXOX");
38
}
39

40

41
int main(void) {
42
    
43
    DDRB |= (1<<PB0) | (1<<PB1);
44
    LIGHT_ON(1<<PB0);
45
    _delay_ms(500);
46
    LIGHT_OFF(1<<PB0);
47
    
48
    //initialize the device
49
    initialize_lcd();
50
    _delay_ms(1000);                    
51
    lcd_clrscr();
52
    
53
    
54
    // mainloop
55
    while(1) {
56
        LIGHT_ON(1<<PB0);
57

58
        for(i=0;i<16;i++){
59
            lcd_puts("X");
60
            _delay_ms(300);
61
        }
62
        lcd_puts("\n");
63
        for(i=0;i<16;i++){
64
            lcd_puts("X");
65
            _delay_ms(200);
66
        }
67

68
        LIGHT_OFF(1<<PB0);
69
        _delay_ms(1000);
70
        lcd_clrscr();
71
    }
72

73
}

Danke für Ideen.
Angehängte Dateien:
#3294424
Lesenswert?

Was mir als erstes aufgefallen ist:
1
#define LIGHT_ON(l)                     (PORTB |= (l))
2
#define LIGHT_OFF(l)                    (PORTB &= ~(l))
3
#define LIGHT_TOGGLE(l)                 (PORTB ^= (l))
sowie
1
LIGHT_ON(1<<PB1);
2
lcd_init(LCD_DISP_ON);                // initialize display, cursor off
3
LIGHT_OFF(1<<PB1);
und
1
LIGHT_ON(1<<PB0);
2
_delay_ms(500);
3
LIGHT_OFF(1<<PB0);
4

5
....
6

7
    while(1) {
8
        LIGHT_ON(1<<PB0);
9

10
        for(i=0;i<16;i++){
11
            lcd_puts("X");
12
            _delay_ms(300);
13
        }
14
        lcd_puts("\n");
15
        for(i=0;i<16;i++){
16
            lcd_puts("X");
17
            _delay_ms(200);
18
        }
19

20
        LIGHT_OFF(1<<PB0);
21
        _delay_ms(1000);
22
        lcd_clrscr();
23
    }
So ganz richtig ist das nicht. Ob das jetzt dein Problem ist weiß ich 
nicht... aber zumindest EIN Problem
OP #3294429
Lesenswert?

Hi Timmo, Hi Georg

da hast du recht. Zusammengeschustert. Es geb mal eine Definition 
LED_GREEN und LED_YELLOW.
Hab es wieder eingebaut, aber neee, das Problem ist es nicht.

Der Kabeltipp von Georg kann schon sein, bei meinem ersten Display ist 
es höchstens 12cm lang.

Der uC läuft mit externen 16Mhz.
Was benutze ich denn am Besten um die Distanz zu überbrücken?
#3294562
Lesenswert?

Wolfgang schrieb:
> Thomas Eckmann schrieb:
>> Wo ist denn F_CPU definiert?
>
> Spätestens in util.h
> Dann sollte aber die Warnmeldung gekommen sein ;-)
>
>
1
#ifndef F_CPU
2
> /* prevent compiler error by supplying a default */
3
> # warning "F_CPU not defined for <util/delay.h>"
4
> # define F_CPU 1000000UL
5
> #endif
6
>

Wenn du hier seit mehr als drei Tagen mitliest, solltest du wissen, daß 
dies einer der absoluten Top-10 Fehler ist und die Warnings 
grundsätzlich nicht beachtet werden.

Mfg.
Gast #3294573
Lesenswert?

Thomas Eckmann schrieb:
> Wenn du hier seit mehr als drei Tagen mitliest, solltest du wissen, daß
> dies einer der absoluten Top-10 Fehler ist und die Warnings
> grundsätzlich nicht beachtet werden.

Deshalb der Hinweis, dass util.h blöderweise ggf. einen Default-Wert 
setzt, der eine anständige Fehlermeldung verhindert, obwohl der Wert mit 
großer Wahrscheinlichkeit vollständiger Humbug ist ;-)
OP #3294581
Lesenswert?

Den Adapter habe ich gebaut um vom eigentlichen Board auf mein geprüftes 
dev- Board zu gehen. Und durchgemessen. Alles ok.

Habe gerade ein zweites Display geklickt, und versuche das letzte Teil 
auszutauschen, an dem es liegen könnte. Alles andere redundant geprüft.
Und  auch Kontrast und CPU tacktung geändert.

Ist doch echt merkwürdig, oder?
Hoffe Display kommt bald, bin echt wild drauf das in betrieb zu nehmen, 
ist das letzte Bauteil eines größeren Orojektes für meine Frau und 
beschäftigt mich seit Mittwoch...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren