| Naam |
Bericht |
Mad Nick
|
Hallo,
Ik zou graag een relais schakelen op een RS232 poort.
Het liefst wil ik dit doen met een MAX232 en een PIC16F62*
HEt schema/aansluiten is geen probleem.
Echter het in PICBASIC programmeren is een tikje moeilijker.
Ik ben nu sinds kort bezig met programmeren in BASIC.
Nu wil ik graag RS232 gaan ontvangen en daarmee schakelen of iets aansturen.
Ik begin met een relais of led.... lekker makkelijk.
Wie kan mij helpen met de code (waar te beginnen)
Ik heb echt geen idee.
ALvast bedankt
|
benleentje
|
Je kan op die manier via RS232 niet een relais schakelen. Via RS232 kun je alleen communiceren. Je verteld de PIC dan wat zijn volgende opdracht is. IN dit geval dus een relais schakelen.
Daarna doet de PICdus deze opdracht uitvoeren en is het de PIC dus die het relais schakeld.
Ga dus eerst eens leren hoe je 1 of meer byte's vanaf de PC naar de PIC moet sturen en hoe je de PC dan verteld dat het ontvangen en begrepen is.
Je kan wel met RS232 direkt een relais aan sturen maar dan gebruik je geen seriele communicatie meer maar sluit je direkt is aan op de data lijnen van die poort Dan kan je bv in visual basics daar een programmatje voor maken.
|
hvktech
|
je kan gemakkelijk en relais schakelen via de com poort of zelfs via een halfgeleider-relais bij voorbeeld de s201-d02 van sharp deze heeft een stuurstroom nodig van max 10ma met een uitgang die max 1,2amp kan schakelen.
zeer simpel in opbouw.
pin 2 van het ic op dtr en pin 3 op gnd
nu kan je met pin 11 en 13 een wisselstroom van max 1,2 a schakelen.
in basic : 10 ba =&h3f8 dit om aan te geven dat het om com 1 gaat
20 out (ba+4),1 hier mee stuur je hem aan
0m hem weer uit te zetten :
30out (ba+4),0
nou hier mee kan je zelf wel wat programma schrijven denk ik of niet
Wil je niet het risico nemen dat er wat fout gaat probeer eerst de uitgang dtr en gnd met een led.
op een 9polige sub d : dtr pin 4 gnd pin 5
op een 25 polige sub d : dtr pin 20 gnd 7
hoop dat je hier wat aan heb.
groetjes henny
|
Mad Nick
|
Volgens mij was de uitleg niet helemaal duidelijk.
Ik wil de RS 232 via MAX232 aan mijn PIC 16F628 hangen.
Vervolgens met deze PIC het relais schakelen, dit omdat er nog meer in die pic geprogrammeerd wordt, zodat het relais alleen onder bepaalde omstandigheden schakeld.
De Basic code is Dus PICBASIC, om een PIC rs232 te laten " lezen".
Dit zou met de commands SROUT en SRIN moeten kunnen.
Ik weet alleen niet precies hoe.
vandaar mijn vraag.
Het is dus niet dat ik een ralais rechtstreeks op mijn com wil gooien...
Alvast bedankt voor de reacties [Bericht gewijzigd door Mad Nick op 25 augustus 2008 08:16:53]
|
Jordi
|
quote:
Reeds duizenden gingen u voor!
Ik neem aan dat je al kennis hebt genomen van de Pic basic cursus van Frits? Daar kun je zeker iets vandaan halen.
Ik zou beginnen door met bijvoorbeeld het sturen van een letter een pootje hoog te krijgen bij de PIC. Druk je dan bijv de letter 'a' in in hyperterminal oid, dan gaat de poot hoog en het ledje/relais aan.
Met een LCD werk je nog iets makkelijker, dan kun je afdrukken wat de PIC ontvangen heeft.
Succes.
Bier zonder alcohol is als een beha aan een waslijn: het beste is er uit!
|
Gerwinh
|
Omdat ik me verveel
code:
Device 16F628A ;Gebruik een 16F628A type
Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL TRUE
PORTB_PULLUPS ON
;*************************************************************************************************************
; Alle byte's enz.
;*************************************************************************************************************
dim ontvangst as byte
;*************************************************************************************************************
; symbols
;*************************************************************************************************************
symbol relay = portb.1
symbol flash_led = portb.2
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 high relay
if ontvangst = "0" Then low relay
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:
high flash_LED ; hoofdprogramma laat een ledje knipperen
DELAYMS 500
low flash_led
GOTO MAIN
End
Relay aan portb.1 knuppen en ledje aan portb.2.
send je 1 heen gaat realy aan send je 0 heen gaat relay uit
Heb het niet getest maar zou moeten werken [Bericht gewijzigd door Gerwinh op 25 augustus 2008 20:19:21]
http://www.gerwinhummel.nl
|
Stijn S
|
Waarom moeten mensen toch voor het kleinste projectje toch altijd al direct naar microcontrollers grijpen...
Dit kan prima zonder microcontroller!
Je kunt softwarematig een I2C bus nabootsen op de RS232 poort van een PC, hiervoor kun je software vinden op de site van Elektuur (EPS 020298-11)
Aan je seriële poort hang je een PCF8574 chipje...
SDA van dat chipje op pin 7 (RTS) van de poort, SCL op pin 4 (DTR).
|
Gerwinh
|
pic's heb ik hier 10 tallen van en gezien het meestal maar 10 min progameren is en er veel mensen zijn die er mee werken.
Daarnaast kun je er ook je eigen ideéén mee doen zoals een net iets afwijkende delay of een reactie terug dat hij het heeft ontvangen. [Bericht gewijzigd door Gerwinh op 25 augustus 2008 17:20:04]
http://www.gerwinhummel.nl
|
timmie
|
@ gerwinh
waar is var gedeclareerd?
en is dat character 1 of is dat decimale waarde 1?
dit maakt nogal een verschil namelijk
DMX interface
|
Gerwinh
|
@ gerwinh
waar is var gedeclareerd?
Hmm was foutje in code is aangepast Thnks
en is dat character 1 of is dat decimale waarde 1?
dit maakt nogal een verschil namelijk
Decimale waarde dus gewoon 1 zenden via hyperterminal of mycomport.WriteLine("1") via VB
http://www.gerwinhummel.nl
|
Mad Nick
|
Bedankt Gerwinh & Jordi,
Ik ga dadelijk eens proberen, en kijken hoever ik kom.
Ik grijp naar een microcontroller omdat het relay alleen moet aangaan als er externe factoren dit toelaten.
Deze worden ook mee geprogrammerd.
Zolang bijvoorbeeld de ruimte te licht is, werkt deze niet.
(lumen meter wordt ook aan de pic gekoppeld)
Verder hangt het ook nog af, van het systeem waar deze schakeling aan komt te hangen.
Dit wordt namelijk niet via een PC, maar via een extern app. aangestuurd die alleen RS-232 signalen uitgeeft.
Deze wordt ook weer geprogrammeerd.
Maar ik ga eens spelen met de code.
Alvast bedankt voor jullie hulp.
GReetz
|
timmie
|
ik ben vb2008 syntax gewend
met een serialport object(managed code)
en als je dan mycomport.write("1") gebruikt dan verstuurd hij het character 1 (wat dus decimale waarde 81 is)
als je dan mycomport.write(char(1)) dan verstuurd hij decimale waarde 1
/edit lijkt me trouwens sterk dat hyperterminal decimaal 1 verstuurt i.p.v decimaal 81 als je 1(als char dus) ingeeft [Bericht gewijzigd door timmie op 25 augustus 2008 20:29:34]
DMX interface
|
Mad Nick
|
Ik ben nog eens verder gegaan met de code,
En ik denk dat ik het ontvangs "poke" op portB
Zo kan ik een byte versturen en 8 uitgangen tegelijk aansturen met een byte.
dus
00000110
Dus nu zijn PORTB.2 en PORTB.3 hoog.
Heeft iemand hier ervaring mee..
Hier de code zoals ik hem nu in gedachten heb..
code:
Device 16F628A ;Gebruik een 16F628A type
Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL TRUE
PORTB_PULLUPS ON
;*************************************************************************************************************
; Alle byte's enz.
;*************************************************************************************************************
dim ontvangst as byte
;*************************************************************************************************************
; symbols
;*************************************************************************************************************
symbol flash_led = porta.2
SYMBOL AAN = 0 ;Geinverteerd AAN
SYMBOL OFF = 0 ;UIT
SYMBOL ON = 1 ;AAN
SYMBOL UIT = 1 ;Geinverteerd UIT
;*************************************************************************************************************
; Declares
;*************************************************************************************************************
DIM B0 as byte
;*************************************************************************************************************
; 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
Poke Portb,B0
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:
high flash_LED ; hoofdprogramma laat een ledje knipperen
DELAYMS 500
low flash_led
GOTO MAIN
End
[Bericht gewijzigd door Mad Nick op 30 augustus 2008 23:11:54]
|