Goedendag,

mijn "grote" verlangen is om met de pc een LCD te voorzien van content. Tekst!

Daarbij wil ik graag werken met een com-poort, een HD44780 compatible LCD (2x16) en een PIC 16F628A omdat ik deze spullen heb liggen en omdat ik Proton LITE gebruik.

Het gaat om de hardware kant en de software voor de PIC.

Nu ben ik al een tijd bezig om te proberen om dit voorelkaar te krijgen. Ik heb bijvoorbeeld het volgende schema geprobeerd: Klikkerdeklik. Dit werkt opzich prima, alleen kan ik het programma niet aanpassen enzo.

Ook heb ik gezocht op UART, maar wat ik daar nu in de praktijk precies mee kan of moet is me een beetje (lees:totaal) onduidelijk.

Het bouwen van de schakelingen is geen probleem. Ook het aansluiten van de LCD op de PIC is geen probleem (Thnx to Frits K)

De grote vraag is dus eigenlijk: hoe krijg ik communicatie op gang tussen pc en PIC met RS232. Ook wil ik dit over een tijd gaan gebruiken om met een PIC een RS232 compatible apparaat aan te sturen (bv een cd speler).

Wie helpt me verder!

Via de printerpoort heb je niet eens een PIC nodig ;)
( Dat is ook een compoort toch? )

[Bericht gewijzigd door Boeip op (25%)]

Voor een AVR heb ik het bijna hapklaar voor je liggen...

Op 4 januari 2009 17:06:06 schreef ruurdadema:

Ook heb ik gezocht op UART, maar wat ik daar nu in de praktijk precies mee kan of moet is me een beetje (lees:totaal) onduidelijk.

Uart - Universal asynchronous receiver/transmitter. Zender en ontvanger van tekens, in botte vertaling.. :)
En manier waarop jou PC en je PIC met elkaar gaan communiceren.

Je kunt dan, net zoals op in link met hyperterminal of een ander terminal programma met je PIC communiceren. Hiervoor zul je wel een User Interface op je PIC moeten programmeren.

Dit zul je moeten doen met de proton set, zal vast wel een print en input instructie inzitten.

Bedankt voor de snelle reacties

@Boeip: waarom via een LPT in plaats van een COMpoort?

@Marco: ik wil het eigenlijk toch wel houden bij PIC...Dat spul heb ik liggen en kan ik redelijk programmeren.

@RoelA: Dat gaat de goede richting op volgens mij: kun je het eens gedetailleerder uiteleggen?

Kijk, ik snap de opbouw van een RS232 protocol ongeveer (Bit treinen, met start en stopbits enzo, maar daarmee kan ik het nog niet realiseren. Als ik via Hyperterminal "Hello World" wegstuur dan moet mijn PIC dat kunnen uitlezen en op het lcd zetten. Dat laatste is het probleem niet, dat eerste wel. Hoe doe ik dat?

Ik kan wel een stukje uit mijn boek over PIC microcontrollers van Bert van Dam overtikken/scannen met OCR voor je. staat een heleboel info in over RS232 communicatie (vooral via de WISP programmer, maar ook met een MAX232). De LCD aansturen via PROTON is heel erg simpel (zit volgensmij zelfs een voorbeeldje bij).
Wat je eigenlijk wilt doen is een verbinding maken met je seriele poort (Printerpoort is parallel dus GEEN RS232). Dit kun je in Visual Basic 6 erg makkelijk doen.
Nadeel is dat VB nogal duur is.
Ik help er graag mee.

Om alleen een LCD aan te sturen kan je de printerpoort gebruiken. Maar ik lees ook dat je later grotere plannen hebt met computer en lcd. Ik denk dat de printerpoort het dan niet meer aan kan ;) Ik gaf even aan dat je een lcd makkelijker via de printerpoort kan aan te sturen dan via een compoort.

Kijk, erg fijn de reacties!

@Boeip: wat je zegt is juist, ik wil het inderdaad graag via RS232 doen om later meer "grote plannen" te realiseren :D Via de link hangen ze ook een LCD rechtstreeks aan de LPT. Nadeel is ook dat binnenkort mijn LPT vol zit met een (nog te bedenken en bouwen) relaisprint.
(je weet hoe dat gaat, allemaal wilde ideeën om van alles en nog wat met de LPT te schakelen en dan ook nog via internet enzo blabla)

@Termination: Dat klinkt wel heel erg super. Overtikken vind ik wel heel veel gevraagd, maar die OCR maakt het wel aantrekkelijker. En dan vooral het stukje over RS232 i.c.m. MAX232. En een voorbeeld zou helemaal geweldig zijn! Qua software gebruik ik liever Delphi, omdat ik daar bekend mee ben. Zal vast wel duurder zijn dan VB, maar iNet is gewillig :p.

Ik ga eens wat scannen voor je. Als het gelukt is zie je het wel verschijnen op je email.

Nadeel is dat VB nogal duur is.
Ik help er graag mee.

VB2005 Express en VB2008 Express kun je gratis d/l.

http://msdn.microsoft.com/nl-nl/vbasic/default(en-us).aspx

Uit eigen ervaring weet ik dat je met VB2005 Express prima software kan maken die via de seriële poort interfaced met een uC.


'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2009 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 2-1-2009                                          *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************

device 16f877a
  
CONFIG hs_OSC, WDT_OFF, PWRTE_ON, LVP_OFF, DEBUG_OFF  

xtal 20

ALL_DIGITAL TRUE  

PORTB_PULLUPS ON 

;*************************************************************************************************************
; Alle byte's enz. 
;*************************************************************************************************************

dim ontvangst as byte

;*************************************************************************************************************
; symbols
;*************************************************************************************************************

symbol relay = portD.7
symbol flash_led = portD.6

SYMBOL AAN  = 0               ;Geinverteerd AAN
SYMBOL OFF  = 0               ;UIT
SYMBOL ON   = 1               ;AAN
SYMBOL UIT  = 1               ;Geinverteerd UIT

;*************************************************************************************************************
; Declares
;*************************************************************************************************************

;*************************************************************************************************************
; Baudrate instellingen rs232  9600,8,N,1
;*************************************************************************************************************

HSERIAL_BAUD = 9600            			      ; Set baud rate
HSERIAL_RCSTA = %10010000  			      ; Enable serial port and continuous receive
HSERIAL_TXSTA = %00100000  			      ; Enable transmit and asynchronous mode
HSERIAL_CLEAR = ON			              ; Optionally clear the buffer before receiving

;*************************************************************************************************************
; Interrupt
;*************************************************************************************************************

main:

    INTCON.7 = 1                                      ; Enable Global Interrupts
    INTCON.6 = 1                                      ; Enable Peripheral Interrupts
    PIE1.5 = 1                                        ; Enable UART Rx Interrupt
    ON_INTERRUPT GOTO INT                             ; If there is UART activity: goto INT
    
    GOTO flash                                         ; Skip INT, goto main program
    
;*************************************************************************************************************
; Hier het hoofdmenu:
;*************************************************************************************************************

INT:

while 1 = 1                                 'while 1 is 1 then stay in this loop

  HRSIN dec ontvangst
  
            if ontvangst = 1 then toggle relay
            if ontvangst = 0 Then hrsout "HoiHoi" ,13,10

  CONTEXT RESTORE                         	      ; Restore the registers and exit

GOTO main                                            ; Goto start so INT will be used again

wend

;*************************************************************************************************************
; Zolang dit ledje aan/uit gaat is er geen RS232 activiteit:
;*************************************************************************************************************

flash:
 while 1 = 1
    toggle flash_led
    delayms 100  
  wend

End

Hier dit is meest simpele code om met uart/rs232 te werken met intterrupt erin :) Voor Proton IDE

Ik zie dat mensen me al weer voor zijn.
De display aansturen vanuit proton is iig erg makkelijk, daar zijn ingebakken routines voor.
Volgensmij alleen de breedte/hoogte instellen en het type LCD definieren, poortjes toewijzen en klaar.

Als het HD44780 is is het gewoon

print at 1,1, "Tekst"
Of voor regel 2
print at 2,1, "Tekst"

Zie ook >> http://www.picbasic.nl/beginners4.htm

Dat is bij mij bekend, en dat is ook niet het probleem. Daar gaat dit topic niet over. Daarentegen vind ik je code wel heel erg handig. Bedankt!

[Bericht gewijzigd door Henry S. op (47%)]

Zo, nou, dus...

Tot mijn grote verrassing zit er in de help van Proton een hele lijst met commando's. (YES)

Dus ik zie SEROUT staan. Ik lezen, en jah, dat zou toch moeten gaan werken.

Voor de zekerheid declareer ik de databits nog even:

DECLARE SERIAL_DATA 8 ' Set SEROUT and SERIN data bits to 8 (default)

Om vervolgens wat uit de uitgang te poepen:

SEROUT PORTB.2 , 9600 , [ "HELLO WORLD" , 13 ]

Maar wat denkje: er komt dus gewoon helemaal niets binnen op de hyperterminal. Wat doe ik fout? Wat vergeet ik?

Dan beginnen we bij 0:

Lijnen vanaf je max232 naar je pic loshalen en R1OUT en T1IN aan elkaar knopen. Dat zijn dus de lijnen die normaal naar je pic lopen, je krijgt zo een loopback.

Als je nu in met hyperterm iets intypt dan krijg je als het goed is de tekst meteen terug. Maakt niet uit welke bitrate je gebruikt, 9600 8-n-1 zou moeten werken.
Mocht dat niet werken dan moet je even je max232 schema even nakijken.

Als dat werkt, pinnen weer aansluiten en kijken of je niets vergeten bent.
Misschien \r\n aan je serout toevoegen, kan zijn dat hyperterm een enter nodig heeft voor ie iets laat zien.


'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2009 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 2-1-2009                                          *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************

Device 16F628A                ;Gebruik een 16F628A type
Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL TRUE  

PORTB_PULLUPS ON 

;*************************************************************************************************************
; Baudrate instellingen rs232  9600,8,N,1
;*************************************************************************************************************

HSERIAL_BAUD = 9600            			      ; Set baud rate
HSERIAL_RCSTA = %10010000  			      ; Enable serial port and continuous receive
HSERIAL_TXSTA = %00100000  			      ; Enable transmit and asynchronous mode
HSERIAL_CLEAR = ON			              ; Optionally clear the buffer before receiving
 
;*************************************************************************************************************
; Hier het hoofdmenu:
;*************************************************************************************************************


while 1 = 1                                 

hrsout "HoiHoi" ,13,10

wend

end

Compile deze code eens en zet je hyperterminal op 9600, 8, n, 1

Dan krijg je heel snel achterelkaar HoiHoi te zien :) Eerst Hyperterminal opstarten dan Schakeling aanzetten anders werkt het niet :)

Enige verschil is hier dat je Hardware Uart gebruikt ipv Software Uart.

De loopback op de compoort werkt prima

EDIT: ik gebruik overigens het schema volgens:
http://www.oz1bxm.dk/PIC/628uart.htm
En dan alleen het MAX232 gedeelte...

[Bericht gewijzigd door ruurdadema op (44%)]

Schema zou gewoon moeten werken ?

Dit zou je in Hyperterminal moeten zien >> http://img178.imageshack.us/img178/1328/hoihoiwg9.jpg

Alleen MAX232 gedeelte? Dus zonder PIC? Dat gaat vrees ik niet veel doen :P
Gebruik dat volledige schema maar

Op 4 januari 2009 23:10:21 schreef Gerwinh:
Schema zou gewoon moeten werken ?

Dit zou je in Hyperterminal moeten zien >> http://img178.imageshack.us/img178/1328/hoihoiwg9.jpg

Ik zie op je screendump ook een stukje bumblebee... Is dat de hex van je net gemaakte stukje software? Ik krijg n.l. een hele andere hex file...

Maar tot op heden nog geen succes. Nog andere suggesties?

Op 4 januari 2009 23:12:06 schreef Twabi2:
Alleen MAX232 gedeelte? Dus zonder PIC? Dat gaat vrees ik niet veel doen :P
Gebruik dat volledige schema maar

Alleen even om de loopback te testen. Uiteraard i.c.m. de code met de pic erbij...

[Bericht gewijzigd door Henry S. op (25%)]


000000 000000 00 00 00 30 8A 00 15 28 0C 1E 04 28 99 00 03 14
000010 000008 10 28 83 17 80 01 84 0A FF 3E 03 1D 0A 28 10 28
000020 000010 83 13 83 12 03 13 00 00 08 00 83 16 20 30 99 00
000030 000018 20 30 98 00 83 12 90 30 98 00 A0 01 07 30 83 16
000040 000020 9C 00 07 30 9F 00 81 13 20 30 84 00 60 30 83 12
000050 000028 8A 01 0A 20 A0 30 84 00 50 30 8A 01 0A 20 10 30
000060 000030 84 00 60 30 8A 01 09 20 90 30 84 00 60 30 8A 01
000070 000038 09 20 83 16 85 01 83 12 48 30 8A 01 04 20 6F 30
000080 000040 8A 01 04 20 69 30 8A 01 04 20 48 30 8A 01 04 20
000090 000048 6F 30 8A 01 04 20 69 30 8A 01 04 20 0D 30 8A 01
0000A0 000050 04 20 0A 30 8A 01 04 20 8A 01 3B 28 63 00 8A 01
0000B0 000058 56 28
00400E 002007 72 3F

Lijkt me vreemd maar hier heb je hem alsnog :p

Hmm, hoe prop ik dit op een fatsoenlijke maneir in Bumblebee?