Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[PIC] LCD aansturen

Pagina: 1
Acties:
  • 166 views sinds 30-01-2008
  • Reageer

  • dj_dysaster
  • Registratie: Januari 2003
  • Laatst online: 20:04
Hoi,

Ik wat aan het prutsen met een PIC 16F628 en een 16x2 lcd.
Dit lcd werkt goed op de lpt poort en nu wou ik hem op mijn Pic aansluiten als eerste project :) .

Na de search te hebben gebruikt kwam ik achter dit:
http://members.home.nl/as...o/lichtbak_door_Atmoz.jpg schema van atmoz waar ik alleen het rechter gedeelte van hoefde te maken.

Voor de software gebruikte ik dit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
include 16f628_4
include jlib
include hd447804

hd44780_instruction(0x28)               -- Two line mode, 4-bit control
delay_10uS(16)

forever loop
hd44780_clear
hd44780_line1
hd44780 = "A"
delay_100ms
hd44780 = "t"
delay_100ms
hd44780 = "m"
delay_100ms
hd44780 = "o"
delay_100ms
hd44780 = "z"
delay_100ms
hd44780 = "!"
delay_100ms
hd44780 = "!"
delay_100ms   
hd44780 = "!"
hd44780 = " "
delay_500ms
hd44780 = "j"
delay_100ms
hd44780 = "a"
delay_100ms
hd44780 = "w"
delay_100ms
hd44780 = "e"
delay_100ms
hd44780 = "l"
delay_100ms
hd44780 = "1"
delay_100ms
hd44780 = "2"
delay_100ms
hd44780 = "3"
delay_100ms
hd44780 = "4"
delay_100ms
hd44780 = "5"
delay_100ms
hd44780 = "6"
delay_100ms
hd44780 = "A"
delay_100ms
hd44780 = "t"
delay_100ms
hd44780 = "m"
delay_100ms
hd44780 = "o"
delay_100ms
hd44780 = "z"
delay_100ms
hd44780 = "!"
delay_100ms
hd44780 = "!"
delay_100ms   
hd44780 = "!"
hd44780 = " "
delay_500ms
hd44780 = "j"
delay_100ms
hd44780 = "a"
delay_100ms
hd44780 = "w"
delay_100ms
hd44780 = "e"
delay_100ms
hd44780 = "l"
delay_100ms
hd44780 = "1"
delay_100ms
hd44780 = "2"
delay_100ms
hd44780 = "3"
delay_100ms
hd44780 = "4"
delay_100ms
hd44780 = "5"
delay_100ms
hd44780 = "6"
delay_100ms
delay_2s
hd44780_line2
hd44780 = "1"
hd44780 = "2"
hd44780 = "3"
hd44780 = "4"
hd44780 = "5"
hd44780 = "6"
hd44780 = "7"
hd44780 = "8"
hd44780 = "9"
hd44780 = "0"
hd44780 = "9"
hd44780 = "8"
hd44780 = "7"
hd44780 = "6"
hd44780 = "5"
hd44780 = "4"
hd44780 = "3"
hd44780 = "2"
hd44780 = "1"
hd44780 = "0"
hd44780 = "0"
hd44780 = "1"
hd44780 = "2"
hd44780 = "3"
hd44780 = "4"
hd44780 = "5"
hd44780 = "6"
hd44780 = "7"
hd44780 = "8"
hd44780 = "9"
hd44780 = "0"
hd44780 = "9"
hd44780 = "8"
hd44780 = "7"
hd44780 = "6"
hd44780 = "5"
hd44780 = "4"
hd44780 = "3"
hd44780 = "2"
hd44780 = "1"
delay_2s
end loop


En dit heb ik er ingeprogt met de simpele progger van Circuits online wat goedgaat :D .

Daarna zet ik er stroom op en er gebeurt................ NIKS :'( .

Kunnen jullie me helpen?

Verwijderd

Kijk hier eens voor wat meer info, ik denk dat deze tutorial wel leerzaam zal zijn.

http://www.circuitsonline...elen/view.php?id=8&page=1

  • dj_dysaster
  • Registratie: Januari 2003
  • Laatst online: 20:04
Die tut ken ik al ;) .

  • I386DX
  • Registratie: Juni 2002
  • Laatst online: 16-11 20:12
Schrijf het programma eens volledig zelf, zonder gebruik te maken van al ingebouwde routines.
Dan leer je meer en je weet perfect wat er dan gebeurt (of zou moeten gebeuren...)

Voorbeeldje wat ik ooit gedaan heb, was wel mindere compiler.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
int buffer;
#define E 0
#define RW 1
#define RS 2
#define Busy 7
#define LCD_cl 1
#define LCD_hm 2
#define LCD_st 56
#define LCD_on 14
#define e_mode 5


init()
{
//Initialisatie

        set_bit (STATUS,RP0);           //bank 1 selecteren
        set_tris_a(0);              //poort a uitgang maken
        clear_bit (STATUS,RP0);         //bank 0 selecteren
}

busyflag()
{
//Testen of het LCD klaar is om de volgende instructie te ontvangen

bf:     set_bit (STATUS,RP0);           //bank 1 selecteren
        set_tris_b(255);            //poort b ingang maken
        output_low_port_a(RS);          //Data als instructie
        output_high_port_a(RW);         //LCD in leesmodus
        output_high_port_a(E);          //LCD enablen
        if (input_pin_port_b(7)==1); goto bf;   //busyflag testen                                         
        else output_low_port_a(E);      //LCD disablen
}

write_data()
{
//Karakter naar het LCD schrijven
        
        busyflag();             //busyflag oproepen
        set_bit (STATUS,RP0);           //bank 1 selecteren
        set_tris_b(0);              //datalijnen uitgang maken
        clear_bit (STATUS,RP0);         //bank 0 selecteren
        output_high_port_a(RS);         //data als teken
        output_low_port_a(RW);          //LCD in schrijfmodus
        output_high_port_a(E);          //LCD enablen
        output_port_b(buffer);          //PORTB waarde van buffer geven
        output_low_port_a(E);           //LCD disablen      
        
}           

write_instr()
{
//Instructie naar het LCD schrijven
        
        busyflag();
        set_bit (STATUS,RP0);           //bank 1 selecteren
        set_tris_b(0);              //datalijnen uitgang maken
        clear_bit (STATUS,RP0);         //bank 0 selecteren
        output_low_port_a(RS);          //data als instructie
        output_low_port_a(RW);          //LCD in schrijfmodus
        output_high_port_a(E);          //LCD enablen
        output_port_b(buffer);          //PORTB waarde van buffer geven
        output_low_port_a(E);           //LCD disablen  
}


//Messages

msg1()
{
        buffer='01001100';
}

main()
{
        init();
        PORTA=0;
        buffer=LCD_st;
        write_instr();
        
        buffer=LCD_on;
        write_instr();
        
        buffer=LCD_cl;
        write_instr();
        
        buffer=e_mode;
        write_instr();
        
        msg1();
        write_data();
        
        
}

  • Cassettebandje
  • Registratie: Juli 2002
  • Laatst online: 21-11 20:56

Cassettebandje

SA-C90 TDK

- die hd44780_instruction(0x28) hoeft volgens mij niet. (Volgens het example in de documentatie)
- runt je pic wel?
- kristal gebruikt of interne oscillator--> wel aangegeven bij het programmeren?
- wat doet dit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
   include 16f84_10
   include jlib
   include hd447804

   hd44780_clear
 
   hd44780 = "H"
   hd44780 = "e"
   hd44780 = "l"
   hd44780 = "l"
   hd44780 = "o"
   hd44780 = " "
   hd44780 = "W"
   hd44780 = "o"
   hd44780 = "r"
   hd44780 = "l"
   hd44780 = "d"

[ Voor 15% gewijzigd door Cassettebandje op 29-12-2004 18:44 ]


  • Atmoz
  • Registratie: Juli 2001
  • Laatst online: 21-11 14:23

Atmoz

Techno!!

lol, mijn code :D

Maareh, ik gebruik daar (zoals je in het schema kunt zien) geen los kristal, maar gewoon het interne. De PIC heb ik ook geprogrammeerd met de "simpele PIC programmer" van CO. Het zou echt moeten werken.

Als je projecten met een PIC maakt zou ik je zowieso aanraden om er een LED aan te hangen en deze (bij het opstarten van de PIC) 2x laten knipperen ofzo, dan weet je altijd dat de PIC het doet :)

Verwijderd

euhm, misschien open deur intrappen, maar heb je het zaakje wel gecompileerd?
kristal goed ingesteld?

  • Atmoz
  • Registratie: Juli 2001
  • Laatst online: 21-11 14:23

Atmoz

Techno!!

Verwijderd schreef op woensdag 29 december 2004 @ 22:55:
euhm, misschien open deur intrappen, maar heb je het zaakje wel gecompileerd?
kristal goed ingesteld?
Idd, aan de startpost te zien is dat niet gebeurt >:)

[edit]

@TS: heb je het programma "JALcc" op je pc staan?

[ Voor 11% gewijzigd door Atmoz op 29-12-2004 23:00 ]


Verwijderd

Programmeer da ding ineens in assembler.Het lijkt mss wa moeilijker (en da zal het wsl ook wel zijn als ge het nog nooit gedaan hebt) maar dan weet ge tenminste waar ge mee bezig zijt...
Jal is allemaal goed en wel ma ge hebt geen idee wa uw code nu eigenlijk doet

/ sorry voort plat vlaams maar had geen zin om beschaafd nederlands te klappen :)

  • I386DX
  • Registratie: Juni 2002
  • Laatst online: 16-11 20:12
Verwijderd schreef op woensdag 29 december 2004 @ 23:05:
Programmeer da ding ineens in assembler.Het lijkt mss wa moeilijker (en da zal het wsl ook wel zijn als ge het nog nooit gedaan hebt) maar dan weet ge tenminste waar ge mee bezig zijt...
Jal is allemaal goed en wel ma ge hebt geen idee wa uw code nu eigenlijk doet

/ sorry voort plat vlaams maar had geen zin om beschaafd nederlands te klappen :)
Daar kan ik je eigenlijk alleen maar gelijk in geven, door te programmeren in ASM leer je echt de werking van de PIC, daarna kunde, zoals ik, overschakelen op C.

//ps. Vlaams ruled :-D

Verwijderd

http://ouwehand.net/~peter/lcd/lcd.shtml


Mooie uitleg voor het besturen van een HD44780 display dmv een 8051 controller...
Zoek wat sites rond PIC programmeren in assembler (zijn er met hooooooopeeen!!), en dan zou je dat ding wel werkende moeten krijgen.
Als je met JAL overweg kan ga ik ervan uit dat je wel wat programmeerervaring hebt.
De overstap naar assembler is in dat geval niet al te moeilijk, zolang je geen sin en cos bewerkingen enzo wilt doen ;)

// pps: Vlaanderen boven _/-\o_ :+
Pagina: 1