SchemaTheek
 
Home Nieuws Forum Schema's Artikelen Magazine Downloads Links Shops Zoeken
 
Controle Paneel
Gebruikersnaam
Wachtwoord
  Onthoud mij
» Wachtwoord?
» Registreren
Site info
» Het Team
» Contact
» FAQ
» Leden
» Upload Archief
Stats
Totaal online: 21
21 gasten
0 leden:
Forum > Digitaal > Probleem met lcd 2*16 en 16f877a
[1] 2 »
pascalbianca
Lid
Berichten: 1394
Gepost op vrijdag 18 December 2009 20:01:56 QuoteWijzig

Ik heb de bekende display aangesloten aan een 16f628a en werkt zonder problemen.
Nu wil ik die lcd aansluiten op een 16f877a, heb alle snoeren aangesloten maar krijg alleen blokjes te zien.
Kan mij iemand mischien zeggen hoe dit kan en hoe hij wel aangesloten moet worden?

Volgens mij zit alles goed, maar ja foutjes maken zit er natuurlijk altijd in.

http://pascalbianca.blogspot.nl/
reddevil
Lid
Berichten: 1224
Gepost op vrijdag 18 December 2009 20:09:50 QuoteWijzig

Wat heb je waar aangesloten op het display en de pic? De en lijn, de rs lijn en de 4 data lijnen.
Hier hetzelfde probleem. http://www.schematheek.net/index.php?p=forum/topic&t=225&n=2#2405


Veel te weinig tijd voor mijn projecten of heb ik er soms te veel?
pascalbianca
Lid
Berichten: 1394
Gepost op zaterdag 19 December 2009 00:48:01 QuoteWijzig

Ik heb al vanalles geprobeerd, maar blijf de blokjes houden.
Zelfs dat van stynus geprobeerd ondanks het een 16f876 was.
Maar niets helpt.
Op een 16f628a totaal geen probleem om de display aan de praat te krijgen, maar op de 16f877a niet dus

Ik heb het nu exact aangesloten zoals hier bij een pic16f628a, maar zonder succes.


 
[Bericht gewijzigd door pascalbianca op Zaterdag 19 December 2009 02:18:21]


http://pascalbianca.blogspot.nl/
reddevil
Lid
Berichten: 1224
Gepost op zaterdag 19 December 2009 09:48:46 QuoteWijzig

Als je dezelfde poorten als hierboven gebruikt hebt, gebruik dan deze code eens:

Code

Device 16F876 
Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, xt_osc
ALL_DIGITAL TRUE
XTAL = 20Mhz
DECLARE LCD_DTPIN PORTB.4
DECLARE LCD_ENPIN = PORTB.2
DECLARE LCD_RSPIN = PORTB.3
Clear

DelayMS 500
Print At 1, 1, "LCD test"


End


Je hebt je kristal toch niet vergeten he, zonder gaat het niet.
 
[Bericht gewijzigd door reddevil op Zaterdag 19 December 2009 09:49:22]


Veel te weinig tijd voor mijn projecten of heb ik er soms te veel?
Stynus
Admin
Berichten: 2776
Gepost op zaterdag 19 December 2009 11:05:24 QuoteWijzig

Die fuses kunnen zo niet.
INTRC_OSC_NOCLKOUT is voor interne oscilator en die heeft een 877a niet. Dat moet HS_OSC worden voor 20Mhz. De xt_osc moet ook weg dan.

Misschien moet ik ook maar eens een artikel schrijven over de fuses bij pic's.


Met vriendelijke groet, Stynus ||| www.elektronicastynus.be
pascalbianca
Lid
Berichten: 1394
Gepost op zaterdag 19 December 2009 11:52:59 QuoteWijzig

Nee Reddeil, de kristal heb ik inderdaad al ertussen zitten.

Stynus dit bedoel je toch voor die 16f877a:

Code
Config CP_OFF , CPD_OFF , WDT_OFF , HS_OSC , PWRTE_ON , BODEN_OFF , LVP_OFF , DEBUG_OFF 



Dus de code van Reddevil gecorrigeerd zou het moeten zijn:

Code
Device 16F877A 
Config CP_OFF , CPD_OFF , WDT_OFF , HS_OSC , PWRTE_ON , BODEN_OFF , LVP_OFF , DEBUG_OFF 
ALL_DIGITAL TRUE
XTAL = 20Mhz
Declare LCD_DTPIN PORTB.4
Declare LCD_ENPIN = PORTB.2
Declare LCD_RSPIN = PORTB.3
Clear

DelayMS 500
Print At 1, 1, "LCD test"

End



Maar werkt nog niet, snap het niet meer.
Heb opnieuw alles nog eens opnieuw aangesloten, maar zonder succes.

[Edit]
Nu heb ik iets ontdekt maar wat precies de oorzaak is weet ik niet.
Alles is goed aangesloten, maar dan krijg ik allemaal 3 te zien, maar als ik ergens achter op de lcd met mijn vinger kom gaat hij opeens wel en laat ik mijn vinger weg dan krijg ik die 3 weer.
Dacht dat het een kapotte lcd zou zijn , dus had ik voor de zekerheid nog een genomen en die doet hetzelfde.

Moet op die openstaande pinnen soms nog een aarde? neem aan als ik toch met mijn vinger achter de lcd houd dat ik aarde maak.
 
[Bericht gewijzigd door pascalbianca op Zaterdag 19 December 2009 12:45:27]


http://pascalbianca.blogspot.nl/
Stynus
Admin
Berichten: 2776
Gepost op zaterdag 19 December 2009 12:46:05 QuoteWijzig

Klopt.

Hang is een ledje op een uitgang en maak is een knipper ledje. Dan weet je of de pic draait.

EDIT: dan heb je denk ik ergens een pin loshangen ofzo. Of 2 (of meer) datalijnen verwisseld.

EDIT2:
Ik zag dat je dit schema had geupload:

Dat schema klopt niet helemaal
Je bent daar een aantal dingen vergeten.
-Er moet een pullup weerstand aan de mclr pin
-Je pic moet langs 2 kanten voeding krijgen
-Aan 2 kanten van de pic een 100nF condensator
-De voeding van het lcd trek je uit de pic ofzo? Dat schema klopt zo niet echt. Bekijk het schema dat je eerder hierboven poste nog maar eens goed.
 
[Bericht gewijzigd door Stynus op Zaterdag 19 December 2009 12:49:28]


Met vriendelijke groet, Stynus ||| www.elektronicastynus.be
dannymyron
Lid
Berichten: 46
Gepost op zaterdag 19 December 2009 13:19:04 QuoteWijzig

Zoals stynus zegt zorg dat de mclr pin via 33K weerstand aand de +5V hangt voeding op de 4 pennen van de pic
declareer de RS en EN pen via op de juiste poort en laat dan de fuse regel in godsnaam toch weg , die zorgt voor 99 % allen maar voor problemen. Gebruik in mijn programma's nooit fuses.

Stynus
Admin
Berichten: 2776
Gepost op zaterdag 19 December 2009 14:08:01 QuoteWijzig


Quote
dannymyron schreef:
...en laat dan de fuse regel in godsnaam toch weg , die zorgt voor 99 % allen maar voor problemen. Gebruik in mijn programma's nooit fuses.


En dan werkt het meestal totaal niet bij mij. Dan neemt de programmer software de default fuses in zijn inc file. Ik zal wel eens een tutorial schrijven over wat de fuses precies doen en welke op en af moeten staan.


Met vriendelijke groet, Stynus ||| www.elektronicastynus.be
pascalbianca
Lid
Berichten: 1394
Gepost op zaterdag 19 December 2009 15:19:23 QuoteWijzig

Heb het gevonden dankzij Dannymyron en volgens mij had mij Stynus ook hier al eens op geatendeerd
Door een weerstand tussen de MCLR en de +5V te hangen werkt hij nu.


http://pascalbianca.blogspot.nl/
pascalbianca
Lid
Berichten: 1394
Gepost op zondag 20 December 2009 04:20:24 QuoteWijzig

Nu zit ik weer met een probleem.
Ik heb gebruik gemaakt van een eerder voorbeeld van Dannymyron met een timer.

Nu had ik hem werkend op de 16f628a maar nu als eerder beschreven hierboven wil ik het geheel op een 16f877a.

Nou de lcd en de ledjes werken.
Lcd staat op de poorten b7 t/m b2 en de 2 ledjes op porta.0 en a.1.
De druktoetsen staan op portd.0 t/m d.3.


Met onderstaande code werken mijn druktoetsen niet of geven steeds een signal af, kan ik even niet achterhalen want normaal zou dus de tijd moeten lopen en indien de knop van menu word ingedrukt moet hij het menu in, maar hij springt gelijk het menu in en slaat de tijd over.

Waar zit ik fout in deze code? (menu gedeelte weg gelaten)

Code
Device 16F877A ' device name

Config CP_OFF , CPD_OFF , WDT_OFF , HS_OSC , PWRTE_ON , BODEN_OFF , LVP_OFF , DEBUG_OFF 
ALL_DIGITAL TRUE                ;Alle ingangen digitaal

XTAL 20
Declare LCD_DTPIN PORTB.4
Declare LCD_ENPIN = PORTB.2
Declare LCD_RSPIN = PORTB.3

;poorten 76543210
TRISD = %11111111               ; Alle poorten D als input
TRISA = %11111100               ;PORTA.0 en A.1 zijn uitgangen voor de LED's


Symbol T0IF = INTCON.2 ' TMR0 Overflow Interrupt Flag
Symbol GIE  = INTCON.7 ' Global Interrupt Enable
Symbol T0CS = OPTION_REG.5 ' Timer0 Clock Source Select
Symbol T0IE = INTCON.5 ' TMR0 Overflow Interrupt Enable

;Logische constanten
Symbol AAN           = 0        ;Geinverteerd AAN 
Symbol OFF           = 0        ;UIT
Symbol On            = 1        ;AAN
Symbol UIT           = 1        ;Geinverteerd UIT

;Algemene constanten 
Symbol MaxSnelheid   = 2        ;Hoe lager het getal, hoe sneller de teller kan
Symbol Lengte        = 16       ;Dit getal bepaalt de lengte van de lijn (display breedte)

;Poortnamen
Symbol LED_Groen     = PORTA.0  ;LED brandt als waarde te laag is
Symbol LED_Rood      = PORTA.1  ;LED brandt als waarde te hoog is
Symbol ToetsHoger    = PORTD.0  ;Deze pulstoets laat de teller omhoog lopen
Symbol ToetsLager    = PORTD.1  ;Deze pulstoets laat de teller omlaag lopen
Symbol Bevestig      = PORTD.2  ;Deze toets bevestigd keuze 
Symbol Menuutje      = PORTD.3  ;Deze toets gaat terug naar het menu
Symbol MaanlichtAAN  = PORTA.2  ;Controlle led Maanlicht aan , tevens TL maanlicht aan
Symbol DaglichtAAN   = PORTA.3  ;Controlle led Daglicht aan , tevens TL daglicht aan

Dim seconden As Byte
Dim minuten As Byte
Dim Uren As Byte
Dim Dag As Byte
Dim WeekDag As Byte
Dim Timer1 As Byte ;Telt 1/120 seconden
Dim Timer2 As Byte ;Telt 1/4 seconden
Dim Dagtekst[4] As Byte
Dim teller As Byte
Dim Teller1           As Byte   ;Deze Teller kan tot max.255 tellen (BYTE = 255)
Dim TelSnelheid       As Byte   ;Deze variabele heeft de telsnelheid
Dim Tijd              As Word   ;Houdt de tijd bij als een toets is ingedrukt

On_hardware_interrupt GoTo Interrupt

Clear : Cls                         ;Wis alle RAM geheugen
DelayMS 500                     ;LCD stabilisering 
Print At 1,1, "Led Verlichting"
Print At 2,1, "Versie 1.0 "
DelayMS 1500 : Cls
Print At 1,1, "Software Update"
Print At 2,1, "Versie 3.1 "
DelayMS 1500 : Cls
Print At 1,1, "(c) 2009 door "
Print At 2,1, "xxxxxxxxxxx"
DelayMS 1500 : Cls
Print At 1,1, "Controle van "
Print At 2,1, "hardware "
DelayMS 1500 : Cls
Print At 1, 1, "Initialiseren..."   ;Zet op de eerste regel ''Alles in orde!' als alle blokjes er staan  
Print At 2, 1, Rep "_"Lengte       ;Teken een lijn van underscore (lage) streepjes

Repeat
  LED_Groen = On
  LED_Rood  = OFF
DelayMS 200
Inc Teller1
Print At 2, 1, Rep 255Teller1    ;Aantal blokjes afhankelijk van 'Teller' 
  LED_Groen = OFF
  LED_Rood  = On
DelayMS 200
Until Teller1 = Lengte              ;Blokjes tekenen totdat het aantal gelijk is aan 'Lengte' 
  LED_Groen = OFF                     ;...beide LED's uitzetten
  LED_Rood  = OFF
Print At 1, 1, "Alles in orde!  "   ;Zet op de eerste regel 'Klaar!' als alle blokjes er staan 
DelayMS 1500

GoSub Init_Sub

GoTo Hoofdprogramma


; ****************************************************************
; ** Interrupt Handler **
; ****************************************************************

Interrupt:
If T0IF = 0 Then exit_interupt
TMR0 = 94 ;94 '1/120sec interrupt
 

Inc Timer1

Select Timer1
Case 30 '0.25sec
Timer2 = 0

Case 60 '0,5sec
Timer2 = 1

Case 90
Timer2 = 2 '0,75sec

Case = 120
Timer2 = 3:Timer1 = 0 '1sec
Inc seconden
EndSelect

If seconden = 60 Then
seconden = 0
Inc minuten
EndIf

If minuten = 60 Then
minuten = 0
Inc Uren
EndIf

If Uren = 24 Then
Uren = 0
Inc Dag
EndIf

If Dag = 7 Then Dag = 0
T0IF = 0 ' Clear the TMR0 overflow flag

eror:

exit_interupt:

Context Restore ' Restore the registers and exit interrupt

; **********************************************************
; ** Initialisatie **
; **********************************************************

Init_Sub:
Cls
Clear
GIE = 0 ' interrupt afzetten
OPTION_REG = %00000111 ' Initiate the interrupt
T0CS = 0 ' Assign TMR0 clock to internal source
TMR0 = 94 ' timer0 = 94
T0IE = 1 ' Enable TMR0 overflow interrupt
GIE = 1

Uren = 9
minuten = 07
seconden = 50
Dag = 0



Return
; **********************************************************
; ** Hoofdprogramma **
; **********************************************************
Hoofdprogramma:
 
Inc teller
Select Dag
Case 0
Str Dagtekst = "Ma",0
Case 1
Str Dagtekst = "Di",0
Case 2
Str Dagtekst = "Wo",0
Case 3
Str Dagtekst = "Do",0
Case 4
Str Dagtekst = "Vr",0
Case 5
Str Dagtekst = "Za",0
Case 6
Str Dagtekst = "Z0",0
EndSelect
Select Timer2
Case 0
Print At 1,1,Str Dagtekst," ",DEC2 Uren,":",DEC2 minuten ,":",DEC2 seconden
Case 2
Print At 1,1,Str Dagtekst," ",DEC2 Uren," ",DEC2 minuten ," ",DEC2 seconden
EndSelect
; *************** Hier verder gaan met programma **********

If Menuutje = AAN Then GoTo Menu
GoTo Hoofdprogramma 


 
[Bericht gewijzigd door pascalbianca op Zondag 20 December 2009 04:23:18]


http://pascalbianca.blogspot.nl/
reddevil
Lid
Berichten: 1224
Gepost op zondag 20 December 2009 10:05:54 QuoteWijzig

Heb je de weerstanden aan de schakelaars niet vergeten die aan de massa moeten liggen?


Veel te weinig tijd voor mijn projecten of heb ik er soms te veel?
pascalbianca
Lid
Berichten: 1394
Gepost op zondag 20 December 2009 11:56:05 QuoteWijzig

ja die heb ik erop zitten.


http://pascalbianca.blogspot.nl/
Stynus
Admin
Berichten: 2776
Gepost op zondag 20 December 2009 12:44:23 QuoteWijzig

Tris registers instellen.


Met vriendelijke groet, Stynus ||| www.elektronicastynus.be
dannymyron
Lid
Berichten: 46
Gepost op zondag 20 December 2009 14:07:33 QuoteWijzig

ge schrijft 'If Menuutje = AAN Then GoTo Menu'
maar Aan is gedefinieerd als 0 dus als ge
de pullops aan de massa hebt hangen dan staat er altijd
een 0 op u ingangen

pascalbianca
Lid
Berichten: 1394
Gepost op maandag 21 December 2009 07:06:31 QuoteWijzig

Zoeen 2*16 lcd scherm moet die perse op de b poorten staan?
Kan hij eventueel ook op andere poorten zo ja welke want ik blijf ruzie hebben met de toetsen en op de b-poorten heb ik geen probleem ermee.


http://pascalbianca.blogspot.nl/
Stynus
Admin
Berichten: 2776
Gepost op maandag 21 December 2009 10:39:34 QuoteWijzig

Dat kan ook op een andere poort. Open de help even en zoek op print. Daar staat hoe je de nieuwe pinnen kan declareren. Let wel op dat porta.4 open collector is.


Met vriendelijke groet, Stynus ||| www.elektronicastynus.be
dannymyron
Lid
Berichten: 46
Gepost op maandag 21 December 2009 11:35:02 QuoteWijzig

heb je dit na gekeken ?

ge schrijft 'If Menuutje = AAN Then GoTo Menu'
maar Aan is gedefinieerd als 0 dus als ge
de pullops aan de massa hebt hangen dan staat er altijd
een 0 op u ingangen
 
[Bericht gewijzigd door dannymyron op Maandag 21 December 2009 11:36:28]

pascalbianca
Lid
Berichten: 1394
Gepost op maandag 21 December 2009 16:15:48 QuoteWijzig

Nee heb ik nog niet nagekeken, sorry.
Ben momenteel met 4 projecten bezig o.a. mijn ets machine (nou ja machine half/half) , deel ets en deel ontwikkel.
Zodra deze klaar is kan ik met de rest verder, ben dat gesoldeer van lijnen oa. een beetje moe


http://pascalbianca.blogspot.nl/
pascalbianca
Lid
Berichten: 1394
Gepost op dinsdag 22 December 2009 16:03:21 QuoteWijzig

Ik moet nog het keypad ontwikkelen, dus het antwoord is dannymyron nog even schuldig van me.

Wat ik wel even wil vragen.
Ik heb nu de display aan de praat op 16f877a op de c-poorten zodat de b-poorten vrij blijven de keypad.
Nu wou ik het licht van de lcd aan/uit schakelen via bv portd.2.
Kan het zijn omdat deze via een port word geschakeld dat het licht zwakker brand als dat je hem rechtstreeks op de +5v zet?
Ik heb nergens kortsluiting omdat het display het enigste is wat er momenteel opzit.

PS ik schakel met de +lijn van de lcd licht.
 
[Bericht gewijzigd door pascalbianca op Dinsdag 22 December 2009 16:09:52]


http://pascalbianca.blogspot.nl/
dannymyron
Lid
Berichten: 46
Gepost op dinsdag 22 December 2009 17:17:08 QuoteWijzig

en picpoort levert 25 mA max, als je 50 mA
nodig hebt kan je 2 poorten parallel plaatsen
dit mag

[1] 2 »

Active Topics

» Inrichting laadruimte ...
» schema HK audio pro 21...
» Stroom verdeelbox 230V...
» Subaru Outback 2016
» Stofafzuiging
» Aanpassingen aanbouwde...
» Audi
» Show je mini projecten
» Puls schkelaar
» Draadknipper

» Meer actieve topics

Advertenties

ElektronicaStynus

© 2004-2019 SchemaTheek
Laadtijd: 0.08144 sec.