Jasper91
'The purpose of my life, is to invent warp drive'
9V batterij, maar het geheel werkt gewoon met een 16F648A
@henry
Je hebt m;n antwoord niet begrepen.. ik wist niet of ik wel maar alleen die pin moest doen omdat die niet werkte
[Bericht gewijzigd door Jasper91 op (52%)]
9V aan de Wisp veronderstel ik dan? Ik ken het zo niet vanbuiten maar dat lijkt mij wel goed.
Als het met een andere pic wel werkt raad ik jou aan alles eens te herbeginnen en voortgaan op de datasheet, niet de manual. Eigenlijk wel op de manual, maar in de manual staat niet voor elk type uitgewerk, dus de datasheet. Ik bedoel dat er niets mis is met de manual zolang je niet als een robotje gaat (verkeerd) lezen en overnemen. Een beetje nadenken is wel nodig bij het aansluiten.
Jasper91
'The purpose of my life, is to invent warp drive'
Ik weet niet hoe maar hij werkt nu xD.. zal wel per ongelijk iets goeds hebben gedaan..
In ieder geval super bedankt voor jullie hulp en tijd!
Op 16 juni 2008 21:40:29 schreef Jasper91:
Je hebt m;n antwoord niet begrepen.. ik wist niet of ik wel maar alleen die pin moest doen omdat die niet werkte
Ik had je wel begrepen, het is niet logisch!
Het werkt 'zo maar', dat wijst richting breadboard.
Op 16 juni 2008 20:48:27 schreef Jasper91:
Ik heb de datasheet al de eerste keer nagekeken en daar stond pin 38.. dus ik die aangesloten en toen werkte die niet. Dus toen heb ik allebei maar geprobeerd maar toen bleek hij nog steeds niet te werken.. dus dat over 'niet in datasheet kijken' is onzin
Als in de datasheet pgm op 38 staat, dan heeft het echt geen nut om het op een andere pin te proberen. Het probleem lag waarschijnlijk gewoon aan het ontbreken van de 100nF (en 47uF)
Frits Kieftenbelt
Ohm sweet Ohm | www.picbasic.nl
En probeer zo snel mogelijk een echte voeding te krijgen i.p.v. een 9V batterij.
Als je een Wisp648 programmer hebt, is een goedkope netadapter al voldoende.
Jasper91
'The purpose of my life, is to invent warp drive'
Iig werkt het programmeren nu wel maar de code werkt nog niet
. Ik heb nu dit:
;*****Configuration****
list p=18F452
#INCLUDE <P18F452.INC>
;18F series Development Configuration Information
CONFIG BOR=ON ; Brown out reset ON
CONFIG BORV=45 ; Brown out detect voltage=4.5 Volt
CONFIG CCP2MUX=OFF ; CCP2 input/output is to RB3
CONFIG DEBUG=ON ; Background debugger ON
CONFIG LVP=OFF ; Low Voltage programming OFF
CONFIG OSCS=OFF ; Oscillator switch OFF
CONFIG OSC=HS ; Use HS oscillator (20MHZ here)
CONFIG PWRT=ON ; Power-up timer ON
CONFIG STVR=OFF ; Stack over/underflow OFF
CONFIG WDT=OFF ; Watch dog timer OFF
;UnProtect entire device program space for DEBUG
CONFIG CP0=OFF ; Code Protection Block 0 Disabled
CONFIG CP1=OFF ; Code Protection Block 1 Disabled
CONFIG CP2=OFF ; Code Protection Block 2 Disabled
CONFIG CP3=OFF ; Code Protection Block 3 Disabled
CONFIG CPB=OFF ; Boot Block Code Protection Disabled
CONFIG CPD=OFF ; Data EEPROM Code Protection Disabled
CONFIG WRT0=OFF ; Write Protection Block 0 Disabled
CONFIG WRT1=OFF ; Write Protection Block 1 Disabled
CONFIG WRT2=OFF ; Write Protection Block 2 Disabled
CONFIG WRT3=OFF ; Write Protection Block 3 Disabled
CONFIG WRTB=OFF ; Boot Block Write Protection Disabled
CONFIG WRTC=OFF ; Configuration Register Write Protection Disabled
CONFIG WRTD=OFF ; Data EEPROM Write Protection Disabled
;*****Variables****
adcon1 EQU 0FC1h
trisa EQU 92h
trisb EQU 93h
trisc EQU 94h
trisd EQU 95h
trise EQU 96h
porta EQU 80h
portb EQU 81h
portc EQU 82h
portd EQU 83h
porte EQU 84h
t1con EQU 0FCDh
ccpr1l EQU 0FBEh
ccp1con EQU 0FBDh
t2con EQU 0FCAh
ccpr2l EQU 0FBBh
ccp2con EQU 0FBAh
pr2 EQU 0FCBh
;*****Settings****
ORG 00h
MOVLW 00h
MOVWF trisa ;***** Allemaal uitgangen ****
MOVLW 00h
MOVWF porta ;***** Allemaal uit ****
MOVLW 00h
MOVWF trisb ;***** Allemaal uitgangen ****
MOVLW 00h
MOVWF portb ;***** Allemaal uit ****
MOVLW 00h
MOVWF trisc ;***** Allemaal uitgangen ****
MOVLW 00h
MOVWF portc ;***** Allemaal uit ****
MOVLW 00h
MOVWF trisd ;***** Allemaal uitgangen ****
MOVLW 00h
MOVWF portd ;***** Allemaal uit ****
MOVLW 00h
MOVWF trise ;***** Allemaal uitgangen ****
MOVLW 00h
MOVWF porte ;***** Allemaal uit ****
MOVLW 7h
MOVWF adcon1,0 ;***** Allemaal digitaal ****
;*****Main****
main MOVLW 0FFh
MOVWF porta
MOVLW 0FFh
MOVWF portb
MOVLW 0FFh
MOVWF portc
MOVLW 0FFh
MOVWF portd
MOVLW 0FFh
MOVWF porte
GOTO main
;*****Subroutines****
END
Ik heb de MCLR aan de +5V hangen met een 10k ertussen. Verder is het kristal van 20mhz aangelosten op OSC1 en OSC2 waarbij aan beide kanten van het kristal een 20pF naar de grond loopt. En verder natuurlijk de voeding etc. aangesloten.
Maar als ik nu stroom op het circuit zet en ik de uitgangen van de PIC meet gevn ze allemaal zo'n 0-0.2V!
Het lukt me maar niet om dit op te lossen!
Kan iemand aub helpen?
Alvast bedankt,
Jasper
Het wil nog wel eens werken om de brown-out voltage of de PWRT uit te zetten. Verder gebruik ik voor hexadecimale waardes 0x.. ipv de door jouw gebruikte 0..h. Succes dr mee.
Jasper91
'The purpose of my life, is to invent warp drive'
Ik heb nu gewoon al mijn eigen config's weggehaald en die uit de .inc gebruikt EN HIJ WERKT!
Toch bedankt voor jullie hulp!
Euuhm, jouw manier van probleem oplossen vind ik wel geweldig. Werkt iets niet? Gooi het eruit. Ik denk dat je veel meer leert als je tevens ook de oorzaak van het probleem probeert te achterhalen, mischien niet met succes maar dan weet je op zen minst aan wat het niet ligt.
Als je nu binnen 2 weken, een maand, een jaar, 20 jaar,... hetzelfde weer tegen komt ga je het nog niet weten
.
En het is altijd leuk en handig om van te leren wanneer de TS zijn probleem heeft opgelost dat hij meedeelt wat het probleem nu juist was.
Jasper91
'The purpose of my life, is to invent warp drive'
Iig heb ik nu nog een probleem (ja, ik blijf bezig). Als ik de volgende code werkt niet. Ik heb namelijk gemeten en de poorten worden totaal niet aangestuurd (gemeten na ergens een delay van 20sec tussenzetten):
;*****Includes****
list p=18F452
#INCLUDE <P18F452.INC>
;*****Variables***
count_memory EQU 40h
count EQU 41h
count_inner EQU 42h
lcd_temp EQU 43h
lcd EQU 44h
bit_nr EQU 45h
#define lcd_e PORTD,2
#define lcd_rs PORTD,3
;*****Settings****
ORG 00h
MOVLW 00h
MOVWF TRISA ;***** Allemaal uitgangen ****
MOVLW 00h
MOVWF TRISB ;***** Allemaal uitgangen ****
MOVLW 00h
MOVWF TRISC ;***** Allemaal uitgangen ****
MOVLW 00h
MOVWF TRISD ;***** Allemaal uitgangen ****
MOVLW 00h
MOVWF TRISE ;***** Allemaal uitgangen ****
MOVLW 7h
MOVWF ADCON1,0 ;***** Allemaal digitaal **
;*****Main****
main CALL lcd_initialize
MOVLW "H"
CALL lcd_write_char
GOTO main
;*****General subroutines***
;*****Delay****
delay MOVWF count_memory
MOVLW 0C8h
MOVWF count
MOVLW 064h
MOVWF count_inner
delay_loop DECFSZ count_inner,1
GOTO delay_loop
MOVLW 064h
MOVWF count_inner
DECFSZ count,1
GOTO delay_loop
MOVLW 99h
MOVWF count
DECFSZ count_memory,1
GOTO delay_loop
RETURN
;*****LCD subroutines***
;*****Initialize****
lcd_initialize MOVLW 28h ;40ms wachten
CALL delay
BCF lcd_rs
BCF lcd_e
MOVLW 20h ;Interface: 4 bits
CALL lcd_write
MOVLW 5h ;5ms wachten
CALL delay
MOVLW 28h ;Interface: 4 bits, 2/4 regels, 5x7 matrix
CALL lcd_write
MOVLW 5h ;5ms wachten
CALL delay
MOVLW 0Ch ;Display aan en cursor uit
CALL lcd_write
MOVLW 6h ;Cursor automatisch
CALL lcd_write
CALL lcd_clear ;Scherm legen
RETURN
;*****Write char****
lcd_write_char BSF lcd_rs
CALL lcd_write
RETURN
;*****Write byte****
lcd_write MOVWF lcd_temp ;2e helft bewaren
CALL lcd_write_part ;wegschrijven
SWAPF lcd_temp,1 ;2e helft terughalen
CALL lcd_write_part ;wegschrijven
RETURN
;*****Write part of byte****
lcd_write_part ANDLW 0Fh
ANDWF PORTC,1
MOVF lcd_temp,0
ANDLW 0F0h
IORWF PORTC,1
BSF lcd_e
BCF lcd_e
MOVLW 1h
CALL delay
RETURN
;*****Clear screen****
lcd_clear BCF lcd_rs
MOVLW 1h
CALL lcd_write
MOVLW 2h
CALL delay
RETURN
END
Als ik nu bijvoorbeeld bij 'mijn' de 'lcd_initialize' etc. weghaal en zeg dat '0Fh' in PORTC geven de poorten geen signaal. Dit werkt alleen als ik alleen de inc. van de PIC include en daarna zeg dat '0Fh' in PORTC.
Volgens mij loopt de PIC dus vast of zoiets dergelijks maar dat weet ik niet zeker..
Ligt het er misschien aan dat ik de volgende variables niet kan gebruiken omdat die plekken in het register niet vrij zijn?
count_memory EQU 40h
count EQU 41h
count_inner EQU 42h
lcd_temp EQU 43h
lcd EQU 44h
bit_nr EQU 45h
Ik ben al 2 dagen bezig met dit probleem dus als iemand zou kunnen helpen dit op te lossen zou dat erg welkom zijn!
Alvast bedankt,
Jasper
Wouter van Ooijen
Wouter van Ooijen: VOTI webwinkel, docent HvU (Technische Informatica); C++ on mictrocontrollers blog
ooit gehoord van het read-modify-write probleem?
Jasper91
'The purpose of my life, is to invent warp drive'
Je bedoelt dus dat ik niet direct via de poorten moet werken maar vie een vrije byte en die aan het eind van de rit op de pins zetten?
Wouter van Ooijen
Wouter van Ooijen: VOTI webwinkel, docent HvU (Technische Informatica); C++ on mictrocontrollers blog
Op 20 juni 2008 16:02:09 schreef Jasper91:
Je bedoelt dus dat ik niet direct via de poorten moet werken maar vie een vrije byte en die aan het eind van de rit op de pins zetten?
dat is inderdaad een standaard oplossing, afhakelijk van wat je bedeold mket "aan het eind van de rit".
overigens zeg ik niet dat dat de fout is, alleen dat het een potentieel probleem is.
Jasper91
'The purpose of my life, is to invent warp drive'
Het heeft gewerkt Wouter! Thx! Het scherm is nu leeg ipv de witte balken alleen krijg ik er nog geen char's op.
Iig heb ik dus die port_temp's erin gezet en nog wat veranderd in de 'lcd_write_part' omdat daar nog een foutje zat.
Dit is m'n code nu:
;*****Includes****
list p=18F452
#INCLUDE <P18F452.INC>
;*****Variables***
count_memory EQU 40h
count EQU 41h
count_inner EQU 42h
lcd_temp EQU 43h
lcd EQU 44h
bit_nr EQU 45h
porta_temp EQU 50h
portb_temp EQU 51h
portc_temp EQU 52h
portd_temp EQU 53h
porte_temp EQU 54h
#define lcd_rs portd_temp,3
#define lcd_e portd_temp,2
;*****Settings****
ORG 00h
MOVLW 00h
MOVWF TRISA ;***** Allemaal uitgangen ****
MOVLW 00h
MOVWF TRISB ;***** Allemaal uitgangen ****
MOVLW 00h
MOVWF TRISC ;***** Allemaal uitgangen ****
MOVLW 00h
MOVWF TRISD ;***** Allemaal uitgangen ****
MOVLW 00h
MOVWF TRISE ;***** Allemaal uitgangen ****
MOVLW 7h
MOVWF ADCON1,0 ;***** Allemaal digitaal **
;*****Main****
CALL lcd_initialize
main MOVWF 0FFh
CALL delay
GOTO main
;*****General subroutines***
;*****Delay****
delay MOVWF count_memory
MOVLW 0C8h
MOVWF count
MOVLW 064h
MOVWF count_inner
delay_loop DECFSZ count_inner,1
GOTO delay_loop
MOVLW 064h
MOVWF count_inner
DECFSZ count,1
GOTO delay_loop
MOVLW 99h
MOVWF count
DECFSZ count_memory,1
GOTO delay_loop
RETURN
;*****LCD subroutines***
;*****Initialize****
lcd_initialize MOVLW 28h ;40ms wachten
CALL delay
BCF lcd_rs
BCF lcd_e
MOVF portd_temp,0
MOVWF PORTD
MOVLW 1h
CALL delay
MOVLW B'00100000' ;Interface: 4 bits
CALL lcd_write
MOVLW 5h ;5ms wachten
CALL delay
MOVLW B'00101000' ;Interface: 4 bits, 2/4 regels, 5x7 matrix
CALL lcd_write
MOVLW 5h ;5ms wachten
CALL delay
MOVLW B'00001111' ;Display aan en cursor uit
CALL lcd_write
MOVLW 5h ;5ms wachten
CALL delay
MOVLW B'00000110' ;Cursor automatisch
CALL lcd_write
MOVLW 5h ;5ms wachten
CALL delay
CALL lcd_clear ;Scherm legen
;*****Write char****
lcd_write_char BSF lcd_rs
MOVF portd_temp,0
MOVWF PORTD
CALL lcd_write
RETURN
;*****Write byte****
lcd_write MOVWF lcd_temp ;2e helft bewaren
CALL lcd_write_part ;wegschrijven
SWAPF lcd_temp,1 ;2e helft terughalen
CALL lcd_write_part ;wegschrijven
RETURN
;*****Write part of byte****
lcd_write_part MOVLW B'00001111'
ANDWF PORTC,1
MOVF lcd_temp,0
ANDLW B'11110000'
IORWF PORTC,1
BSF lcd_e
MOVF portd_temp,0
MOVWF PORTD
MOVLW 1h
CALL delay
BCF lcd_e
MOVF portd_temp,0
MOVWF PORTD
MOVLW 1h
CALL delay
RETURN
;*****Clear screen****
lcd_clear BCF lcd_rs
MOVF portd_temp,0
MOVWF PORTD
MOVLW 1h
CALL lcd_write
MOVLW 2h
CALL delay
RETURN
END
Als ik nu 1 van de PORTC-poorten meet blijft die telkens wisselen tussen 3,5 en 5V dus iets blijft hem constant veranderen terwijl er volgens mij geen loop zit die iets met de LCD doet...
Ik heb al een uur lopen zoeken maar ik kom er niet uit...
Wouter van Ooijen
Wouter van Ooijen: VOTI webwinkel, docent HvU (Technische Informatica); C++ on mictrocontrollers blog
Op 20 juni 2008 23:44:12 schreef Jasper91:
ANDWF PORTC,1 MOVF lcd_temp,0 ANDLW B'11110000' IORWF PORTC,1
dit lijkt mr nog niet goed
gebruik ook liever F en W ipv 1 en 0
Jasper91
'The purpose of my life, is to invent warp drive'
Bedankt wouter! Maar hoe moet ik het dan precies veranderen?? Ik heb deze code uit het boek 'domotica' en heb hem dus niet zelf geschreven 
Wouter van Ooijen
Wouter van Ooijen: VOTI webwinkel, docent HvU (Technische Informatica); C++ on mictrocontrollers blog
Op 21 juni 2008 11:23:27 schreef Jasper91:
Bedankt wouter! Maar hoe moet ik het dan precies veranderen??
Dat weet ik ook niet zo even, maar die code lijkt me niet bestand tegen het RMW probleem. Heelaas is er veel code op het web waar dat veoor geld, en dat komt omdat het soms gewoon wel werkt (bij de auteur bv) en soms niet.
Jasper91
'The purpose of my life, is to invent warp drive'
Ik heb alles 100% gemeten. Tussen alle 'config''s een RETURN gezet en gemeten of het klopte wat er in de LCD ging en alles klopte.. inc. de Enable en de RS.. MAAR TOCH DOET DAT STOMME DING HET NIET. Ik ben ondertussen al een week verder sinds ik begonnen ben met die LCD en ik begin ondertussen ligt krankzinnig te worden.. Ik heb nu deze code:
;*****Includes****
list p=18F452
#INCLUDE <P18F452.INC>
;*****Variables***
count_memory EQU 40h
count EQU 41h
count_inner EQU 42h
lcd_temp EQU 43h
lcd EQU 44h
bit_nr EQU 45h
porta_temp EQU 50h
portb_temp EQU 51h
portc_temp EQU 52h
portd_temp EQU 53h
porte_temp EQU 54h
#define lcd_rs portd_temp,3
#define lcd_e portd_temp,2
#define W 0
#define F 1
;*****Settings****
ORG 00h
MOVLW 00h
MOVWF TRISA ;***** Allemaal uitgangen ****
MOVLW 00h
MOVWF TRISB ;***** Allemaal uitgangen ****
MOVLW 00h
MOVWF TRISC ;***** Allemaal uitgangen ****
MOVLW 00h
MOVWF TRISD ;***** Allemaal uitgangen ****
MOVLW 00h
MOVWF TRISE ;***** Allemaal uitgangen ****
MOVLW 7h
MOVWF ADCON1,0 ;***** Allemaal digitaal **
;*****Main****
CALL lcd_initialize
main MOVWF 0FFh
CALL delay
GOTO main
;*****General subroutines***
;*****Delay****
delay MOVWF count_memory
MOVLW 0C8h
MOVWF count
MOVLW 064h
MOVWF count_inner
delay_loop DECFSZ count_inner,F
GOTO delay_loop
MOVLW 064h
MOVWF count_inner
DECFSZ count,F
GOTO delay_loop
MOVLW 99h
MOVWF count
DECFSZ count_memory,F
GOTO delay_loop
RETURN
;*****LCD subroutines***
;*****Initialize****
lcd_initialize MOVLW 28h ;40ms wachten
CALL delay
CLRF portd_temp
MOVF portd_temp,W
MOVWF PORTD
MOVLW 1h
CALL delay
MOVLW B'00110000' ;Interface: 8 bits
CALL lcd_write
MOVLW 5h ;5ms wachten
CALL delay
MOVLW B'00111000' ;Interface: 8 bits, 2/4 regels, 5x7 matrix
CALL lcd_write
MOVLW 5h ;5ms wachten
CALL delay
MOVLW B'00001111' ;Display aan en cursor aan
CALL lcd_write
MOVLW 5h ;5ms wachten
CALL delay
RETURN
MOVLW B'00000110' ;Cursor automatisch
CALL lcd_write
MOVLW 5h ;5ms wachten
CALL delay
CALL lcd_clear ;Scherm legen
RETURN
;*****Write char****
lcd_write_char MOVWF lcd_temp
BSF lcd_rs
MOVF portd_temp,W
MOVWF PORTD
MOVF lcd_temp,W
CALL lcd_write
RETURN
;*****Write byte****
lcd_write MOVWF PORTC
MOVLW 1h
CALL delay
CALL lcd_switch_e
RETURN
;*****Switch lcd_e****
lcd_switch_e BSF lcd_e
MOVF portd_temp,W
MOVWF PORTD
MOVLW 1h
CALL delay
BCF lcd_e
MOVF portd_temp,W
MOVWF PORTD
MOVLW 1h
CALL delay
RETURN
;*****Clear screen****
lcd_clear BCF lcd_rs
MOVF portd_temp,W
MOVWF PORTD
MOVLW B'00000001'
CALL lcd_write
MOVLW 2h
CALL delay
RETURN
END
DB0-DB7 zitten op RC0-RC7. Enable op RD2 en RS op RD3.. Verder zit de VSS op de GND en de VDD op de +5V. De V0 zit op de middelste pin van een 2,5k potmeter die in aangesloten tussen de +5V en de GND (potmeter half open).
Ik hoop echt dat jullie nog wat kunnen vinden 'because this whole thing is driving me crazy'...
Alvast bedankt,
Jasper
Jasper91
'The purpose of my life, is to invent warp drive'
Echt HEEL merkwaardig.. na een pauze van een uur had ik weer ff de stroom aangezet om het resultaat van een week lang tijd verspillen te bekijken EN TOEN WERKTE HIJ OPEENS!
Ik heb nu de tekst 'HELLO WORLD' erop staan
/
Het probleem is alleen nog wel dat dit alleen vanaf een de zijkant te lezen is want al ga je recht voor het LCD zitten zijn alle velden helemaal wit??
Is dit normaal of ben ik iets vergeten?
[Bericht gewijzigd door Jasper91 op (89%)]
Technojunk
Printje geëtst hebben? mail me! | Even the invisible must be perfect | Ook een Meetsnoeren ophangrekje
Jasper91
'The purpose of my life, is to invent warp drive'
Check, check
Het probleem is alleen nog wel dat dit alleen vanaf een de zijkant te lezen is want al ga je recht voor het LCD zitten zijn alle velden helemaal wit??
Is dit normaal of ben ik iets vergeten?
En er zit nog een tekentje voor de tekst 'HELLO WORLD'.. een heel raar tekentje om precies te zijn 
Opgelost! Gewoon even aan de potmeter draaien om een goed contrast krijgen en een extra lcd_clear hebben het opgelost!
Iig super bedankt voor tijd en hulp!
[Bericht gewijzigd door Jasper91 op (20%)]
Jasper91
'The purpose of my life, is to invent warp drive'
Sorry voor dubbelpost maar nog 1 laatste vraagje..
Hoe kan ik de cursor op de volgende regel zetten?? Zoals een 'enter'?
Technojunk
Printje geëtst hebben? mail me! | Even the invisible must be perfect | Ook een Meetsnoeren ophangrekje
PRINT AT 2, 1 ?
[Bericht gewijzigd door Technojunk op (65%)]