Ik ga er mee aan de slag. Op naar de winkel!
Golden Member
Ik ga er mee aan de slag. Op naar de winkel!
Golden Member
Ik heb het aangesloten volgens het schema van Lambiek.
Echter bij het verzenden van een karakter naar COM1 krijg ik de bekende DOS-error "Schrijffout bij het schrijven naar Apparaat COM1" (en dan afbreken, herhalen, etc)
Er gaat dus iets niet goed met de connectie.
Uit een heel grijs verleden herinnerde ik me een aansluitprobleem (dat je RTS en CTS moest doorverbinden om dat te voorkomen).
Of moet het direct werken?
Special Member
Normaal moet je er wel naar toe kunnen schrijven, zelfs als er niks aangesloten is... (werkt de poort wel?)
Voor communicatie verbind ik altijd 1-4-6 en 7-8 door, dan werkt 't met bijna elk randapparaat...
Special Member
Op 24 februari 2020 15:25:47 schreef Bavelt:
Ik heb het aangesloten volgens het schema van Lambiek.
Wat gebruik je allemaal?
Uit een heel grijs verleden herinnerde ik me een aansluitprobleem (dat je RTS en CTS moest doorverbinden om dat te voorkomen).
Ik hoef niets door te verbinden, gebruik dit al jaren om allerlei type pic controllers te schrijven en te lezen.
Golden Member
Ik heb even pin 2 en 3 doorverbonden (het meest simpele)
en dan echo 123 > com1
Dan verschijnt de melding.
Special Member
Wat voor adapter gebruik je nu?
Staat je baudrate goed?
Golden Member
Wat gebruik je allemaal?
Aan de linker kant een laptop (compaq nc6320), die wordt opgestart met DOS 6.22 (bloedsnel!)
Dit om een signaal te verzenden via de seriële poort.
Die gaat de schakeling volgens het schema van Lambiek in. Aan de outputkant gaat het naar een PIC16F1847, die wacht op een inkomend signaal (UART bus).
Het ledje tussen RSOut en pin 3 van de OptoCoupler brandt continu.
Die opto-couplers zijn wel redelijk traag. Dat geeft problemen op hogere snelheden. 19200 baud wordt al moeilijk volgens mij.
Special Member
Op 24 februari 2020 15:58:07 schreef deKees:
Dat geeft problemen op hogere snelheden. 19200 baud wordt al moeilijk volgens mij.
Ja dat klopt, ik ga nooit hoger dan 9600 baud. Dat is voor mijn toepassingen meer dan voldoende.
Als het sneller moet, moeten er andere optocouplers gebruikt worden.
Golden Member
Staat je baudrate goed?
Ik gebruik het commando mode com1:9600,n,8,1,p
Eigenschappen van de COM-poort:
Baud:9600
Pariteit: none
Databits: 8
Stopbits: 1
Time-out: off
XON/OFF: off
CIS-Handshaking: on
DSR Handshaking: on
DSR-rectiesnelheid: OFF
DTR-Circuit: Handshake
RTC-Circuit: Handshake
Golden Member
Wat voor adapter gebruik je nu?
Ik heb een seriële kabel (9-polig). Een kant in de Com poort van de PC, andere de schakeling in met de OptoCoupler zoals op het schema.
Special Member
Op 24 februari 2020 16:02:38 schreef Bavelt:
Ik gebruik het commando mode com1:9600,n,8,1,p
Die instellingen gebruik ik ook.
Gebruik je wel een delay in je microbasic programma?
Special Member
De poort zelf kun je simpel testen door 2 en 3 door te verbinden, alles moet dan ge-echo'ed worden...
Golden Member
Voor communicatie verbind ik altijd 1-4-6 en 7-8 door, dan werkt 't met bijna elk randapparaat...
Als ik dit doe dan verdwijnt idd de melding...
Special Member
Waarom gebruik je geen terminal programma i.p.v. dat echo gedoe?...
(echo gebruikt waarschijnlijk handshaking; als 1-4-6 en 7-8 niet zijn doorverbonden ziet 'ie dat als het randapparaat geen antwoord geeft...)
[Bericht gewijzigd door Arco op maandag 24 februari 2020 17:02:05 (51%)
Special Member
Lync is een handig terminalprogramma voor DOS...
Golden Member
Het hoeft natuurlijk niet persé in DOS. Op deze Laptop - weliswaar een oudje - zit wél Windows 7. Niet snel, maar werkt wel.
Het DOS-gedoe doe ik nu dmv opstarten van een USB stickje met DOS 6.22
Maar als ik met Windows de seriële poort kan aansturen en een string kan wegzenden is het natuurlijk ook prima.
Daar ging het me immers om.
Wat is dan een handig programmaatje? Hterm? Of is dat te zwaar?
Special Member
HTerm is prima...
Ik gebruik het commando mode com1:9600,n,8,1,p
Eigenschappen van de COM-poort:
Baud:9600
Pariteit: none
Databits: 8
Stopbits: 1
Time-out: off
XON/OFF: off
CIS-Handshaking: on
DSR Handshaking: on
DSR-rectiesnelheid: OFF
DTR-Circuit: Handshake
RTC-Circuit: Handshake
Je kunt beter de handshake uitschakelen zolang je die niet gebruikt. Dan hoef je de handshake pinnen niet meer aan te sturen.
[Bericht gewijzigd door deKees op maandag 24 februari 2020 18:03:16 (55%)
Golden Member
Ok, ik ben nu weer een stuk verder. ik kan een string naar de COM1 sturen, Het indicatie ledje knippert na verzenden, de communicatie lijkt dus goed te gaan.
Alleen reageert de interrupt in Mikrobasic niet. (ik test dat met een ledje. Wanneer de interrupt wordt aangeroepen, moet het ledje gaan branden).
Zit daar iets niet goed?
Het vereenvoudigde programma:
pic basic code:
Program LichtKrant_2Display
'----------------------------------------------------------------------------------------
sub procedure Interrupt() iv 0x0004 ics ICS_AUTO
'----------------------------------------------------------------------------------------
If RCIF_bit Then
LATB.0 = 1
RCIF_bit = 0
End If
End Sub
'===============================================================================
Main:
'===============================================================================
OSCCON = %01111000 '16Mhz internal
ANSELB = %00000000 'Port B digital
TRISB = %00000010 'Port B.1 Input
APFCON1 = %00000001 'TX on PortB.5
LATB.0 = 0
UART1_Init(9600) 'initialize UART module
Delay_ms(100)
End.
Golden Member
Het werkt wel met
pic basic code:
if (UART1_Data_Ready() = 1) then
LATB.0 = not latb.0
delay_ms(1000)
receive = UART1_Read()
end if
De aansluitingen lijken daarom correct. Er moet iets met de interrupt zijn.
Special Member
De interrupt aanzetten wil wel eens helpen...
pic basic code:
RCIE_bit = 1
GIE_bit = 1
PEIE_bit = 1
Golden Member
De interrupt aanzetten wil wel eens helpen..
Dat helpt inderdaad
Wat ik nog niet helder heb: Er ontstaat een interrupt bij binnenkomst van een karakter (of reeks) op de COM Poort.
D.m.v. het afvragen van
pic basic code:
If RCIF_bit Then ....
test je of de interrupt het gevolg is van een signaal op de UART.
Maar wanneer komt de volgende interrupt? Is dat per karakter, of bij het einde van de string?
Bijvoorbeeld de string "123" naar de Com Poort. Wanneer eindigt de interrupt dan?
Special Member
Ieder karakter krijgt een eigen interrupt...