rs232 met 16F628a in basic

beste forumleden,

na enkele uurtjes van mijn vrije tijd te verspillen aan zoeken via dit forum en google heb ik ondanks de vele topics die al voorbij gekomen zijn met deze vraag toch maar besloten een topic te openen.

om even de situati te schetsen:
-ik compileer met proton PBP
-ik heb een galvawisp programmer
-op mijn breadboard:max232, pic 16F628
-op mijn computer gebruik ik TERMINAL v1.9b die in een ander topic aangeraden werd. (ziet er idd veel handiger uit in gebruik dan hyperterminal)

mijn probleem:
welk commando moet ik nu gebruiken in basic om een rs232 communicatie met de TERMINAL software te kunnen opzetten?

mijn pogingen tot diagnose en oplossen:
-de helpfiles maakten mij niet veel wijzer, er wordt gesproken over een display en dergelijke, ook uitproberen hielp me niet
-op dit forum valt niet veel duidelijkheid te scheppen in basic, enkel in ASM ongeveer niets begrijp
-wanneer ik de tx en te rx rijn ter hoogte van mijn pic met elkaar verbind komt het bericht netjes terug in de TERMINAL software, daaruit maak ik op dat mijn MAX232 goed aangesloten is.
-rx en tx lijn omwisselen maakt ook geen verschil

wie kan mij hierin nu wat duidelijkheid scheppen? en is het mogelijk om wat hulp te verschaffen tot ik dit werkende krijg?
ik ben bereid tot inzet, hopelijk wordt ik op een opbouwende manier geholpen!

btw: alle verschillende progjes met verschillende comandos die ik al geprobeerd heb hier posten heeft geen zin, tip me eventjes met welk commando ik moet gebruiken en ik wil gerust ook zelf wat werk op tafel leggen.

!overload! to much information in this signature!

hierbij een klein voorbeeld progje:

code:


DEVICE 16F826A
 XTAL = 4

 HSERIAL_BAUD = 9600        ' Set baud rate to 9600
 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

while(1=1)
Hserout("hello dit is een testprogramma")
delayms 5000
wend
end
niet met me uitspraken(of opmerkingen) eens mail me.K8048 guide

oké,

eventjes gebprobeerd en dat gaf al enkele fouten in mijn compiler

om deze foutmeldingen op de lossen moest ik er het volgende van maken:
(ook de configs aangepast naar de opstelling van mijn breadboard.)

code:


Device 16F628A                ;We gebruiken een 16F628A type
Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL TRUE              ;Alle ingangen digitaal


 HSERIAL_BAUD = 9600        ' Set baud rate to 9600
 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

while 1=1
Hserout ["hello dit is een testprogramma"]
delayms 5000
wend
end

een gelijkaardig progje met hetzelfde comando en configs had ik al vooraf geprobeerd.

jammer genoeg heb ik geen scoop om te kijken of er effectief wel iets uit de microcontroller komt.

heeft iemand een andere suggestie om dit te kunnen controleren?
of zijn er nog andere wegen om dit op te lossen?

!overload! to much information in this signature!

geef de fouten van die compilerdt eens.

IF you can't convince them, then confuse them!
marcob

Golden Member

Volgens mij gebruik je de interne oscillator, dit gaat slecht werken met seriële communicatie.
Hang ook eens een led op een vrije uitgang en laat deze knipperen, dan weet je of je programma loopt.

People tend to overestimate what can be done in one year and to underestimate what can be done in five or ten years

zoals je kunt zien in mijn aanpassingen heb ik alle ronde haakjes moeten wegnemen en deze bij het Hserout comando moeten vervangen door vierkante haakjes

@marcob
:p,
funny, hier staat bij mij nu al 2 dagen een led te knipperen precies om die reden, ook eventjes bij dit progje implementeren zodat jullie ook tevreden zijn dus :p

[Bericht gewijzigd door keuninkske op woensdag 29 juli 2009 23:09:04 (37%)

!overload! to much information in this signature!
marcob

Golden Member

Het is iedereen wel eens overkomen, uren zoeken in software en aansluitingen, blijkt je programma door een stomme type fout te lopen. Ledje is simpel en makkelijk. Maar je hoeft het niet voor mij te doen ;-)
Ik denk eerder dat je het met een X-Tal moet proberen

[Bericht gewijzigd door marcob op woensdag 29 juli 2009 23:12:22 (12%)

People tend to overestimate what can be done in one year and to underestimate what can be done in five or ten years

hier beginnen rare dingen te gebeuren vrees ik.

naar aanvraag heb ik dus vlug eventjes een kristal met bijhorende Ctjes genomen en aangesloten.

mijn prog heb ik dus aangepast naar:

code:


Device 16F628A                ;We gebruiken een 16F628A type
xtal= 20


 HSERIAL_BAUD = 9600        ' Set baud rate to 9600
 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

while 1=1
Hserout ["hello dit is een testprogramma"]
delayms 5000
toggle porta.2
wend
end

nu blijkt dus aan de hand van het ledje dat de pic slechts 1 maal de instructieset doorloopt. (de while/wend negeert dus)

ik zoek eventjes het probleem en houd jullie op de hoogte
suggesties altijd welkom

!overload! to much information in this signature!

Moet je bij een PIC geen fuses wijzigen om met een extern kristal te werken ?

slimme mensen vinden oplossingen, genieën vinden problemen.

code:


Device 16F628A                ;We gebruiken een 16F628A type
Config WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF, HS_OSC
ALL_DIGITAL TRUE              ;Alle ingangen digitaal
XTAL 20

 HSERIAL_BAUD = 9600        ' Set baud rate to 9600
 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

while 1=1
Hserout ["hello dit is een testprogramma"]
delayms 5000
toggle porta.2
wend
end

is het nu geworden,
dit programatje werkt, ben er net zelf achter gekomen dat HS_OSC in de configs moet staan voor een extern kristal, had Mr. digital zijn reply nog niet gezien :s

toch werkt de communicatie nog steeds niet

!overload! to much information in this signature!

ondertussen zelf nog een klein testje uitgevoerd.

wegens de afwezigheid van een scoop in mijn hobbywerkplaatsje hier (en niet direct de mogelijkheid om er 1 te bekomen) wilde ik toch testen of er iets uit de uart van de pic kwam.

heb ik dus eers met TERMINAL getest op welke baudrate er flikkering op een ledje te zien was. hierbij was een baudrate van 100 behoorlijk zichtbaar aan pen 12 van de max232

dus heb ik vervolgens de baudrate van de pic in het programma ook op 100 ingesteld en te TX en RX lijn op gelijkaardige flikkering gecontroleerd.

echter was daar niets zichtbaar.

kan ik hieruit concluderen dat de seriele signalen niet op de pennen geplaatst worden?

hoe is dit op te lossen?

!overload! to much information in this signature!

Probeer dit eens. Die haakjes "[ ]" bij HSEROUT hoeven er niet bij te staan.

code:



;      PIC16F628A:          +--v--+                                        
;                       A2  [     ]  A1                 
;                       A3  [     ]  A0  
;   (open drain!)       A4  [     ]< A7 OSC1  
;                       A5  [     ]< A6 OSC2        
;                      GND  [     ]  +5V                                   
;                       B0  [     ]  B7                               
;                  rx   B1  [     ]  B6                               
;                  tx   B2  [     ]  B5                              
;                       B3  [     ]  B4 


;######################## SETTINGS ##############################
DEVICE 16F628A             
CONFIG XT_OSC,WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
XTAL 4

DECLARE HSERIAL_BAUD 9600 
DECLARE HSERIAL_RCSTA $90 
DECLARE HSERIAL_TXSTA $24
DECLARE HSERIAL_CLEAR=1

ALL_DIGITAL TRUE   

;###################### START MAIN LOOP #########################

star:
 DELAYMS 500
 HRSOUT "Kijk dit werkt wel :)"
GOTO star

END
"If I would have listened to my customers, I would have invented a faster horse." - Henry Ford

nope, werkt ook niet,

ik raak zo ongeveer hopelooss over dit onderwerp!

kan iemand een reden verzinnen waarom nog steeds niets uit mijn uart komt?

heb wel geen scoop om dit met volledige zekerheid te stellen.

!overload! to much information in this signature!

Op 30 juli 2009 16:12:00 schreef keuninkske:
nope, werkt ook niet,

Wat?, Dan zal ik nu eens een 16F628 er bij pakken en proberen. Misschien heb ik een typo gemaakt in de bovenstaande code...

Update:
Mijn programma werkt wel. Het geeft om de halve seconde de tekst "Kijk dit werkt wel :)" weer. Dus jouw probleem zit niet in de software. Tijd om eens naar de hardware te kijken

-Hoe heb jij de max232 aangesloten?
-Hoe zit het cristal van 4 MHz aan de pic?
-Wat zijn de instellingen van je hyperterminal program?
-Misschien eens een foto maken en hier posten...

"If I would have listened to my customers, I would have invented a faster horse." - Henry Ford

Fire_IC
Ik heb jouw programma getest, dit werkt bij mij ook.
Je opmerking is goed van die 4Mhz, want hij werkt in zijn voorbeelden met 20Mhz.

// ver gezocht modus//
In geval van wél onvangst maar niet correct.
Ik werk soms met een PCMCIA kaart om een compoort te hebben.
Wanneer je deze voor de 1ste maal installeerd of live inpugt detecteert deze soms de snelheid van de driver µC niet goed. Met als gevolg dat de baudrate 4x lager ligt.
Onder apparatenbeheer kan je in de opties je pc de frequentie detecteren.

Op 30 juli 2009 16:27:36 schreef bleuke:Je opmerking is goed van die 4Mhz, want hij werkt in zijn voorbeelden met 20Mhz.

Dat zie ik nu ook... Echter als hij daadwerkelijk een 20MHz kristal gebruikt dan moet niet alleen het XTAL commando veranderd worden maar ook de DECLARE HSERIAL_RCSTA en DECLARE HSERIAL_TXSTA krijgen dan een andere waarde. Dit staat ook in de data sheet van de PIC.

Om nu te kijken of er "iets" van data uit de TX pin komt kun je er ook gewoon een led op prikken. Ik stuur in mijn voorbeeld 20 bytes weg. Dus met een baudrate van 9600 duurt dit ongeveer 18ms. Dit is dan te zien als een korte flits.

"If I would have listened to my customers, I would have invented a faster horse." - Henry Ford

oké,

bedankt voor de vele hulp maar het wordt wat veel in een keer.

om te beginnen had ik eerst de opstelling staan zonder kristal.
dan werkte ik met de interne oscilator van 4mhz maar ik werd aangeraden een kristal te gebruiken.
aangezien ik enkel 20Mhz liggen heb heb ik deze aangesloten. samen met de 22pF condensatoren die erbij horen
natuurlijk pas ik steeds het programatje aan naar het gebruikte kristal.

terminal staat ingesteld op een baudrate van 9600 en zit wel degelijk op de juiste compoort ingesteld want wanneer ik iets verzend met de TX en RX lijn ter hoogte van de PIC aan elkaar geknoopt wordt alles mooi terug gezonden in een lus.

Daaruit besluit ik ook dat de max232 goed aangesloten is.

jammer genoeg kan ik momenteel geen foto posten omdat mijn zus dhet fototoestel meegenomen heeft op reis.

!overload! to much information in this signature!

zo,

deze avond heb ik aan een vriend zijn oldtimer auto nog wat gaan helpen opschuren, daardoor is er van zoeken naar een oplossing voor dit probleem niet veel in huis gekomen vanavond.

toch prangt de vraag mij te erg om ze te laten liggen.

de opmerking van Fire Ic dat dit in de datasheet vermeld staat was ik niet zo blij mee (omdat ik het hoofdstuk over de usart al goed doorgelezen had)

daarom ben ik bij het thuiskomen maar direct nog eens begonnen met het opnieuw doorlezen van deze datasheet.

hierin ben ik uiteindelijk toch nog ergens tussen 2 afbeeldingen door volgende lijst tegengekomen.

Follow these steps when setting up an Asynchronous
Transmission:
1. TRISB<1> bit needs to be set and TRISB<2> bit
cleared in order to configure pins RB2/TX/CK
and RB1/RX/DT as the Universal Synchronous
Asynchronous Receiver Transmitter pins.
2. Initialize the SPBRG register for the appropriate
baud rate. If a high-speed baud rate is desired,
set bit BRGH. (Section 12.1 "USART Baud
Rate Generator (BRG)")
3. Enable the asynchronous serial port by clearing
bit SYNC and setting bit SPEN.
4. If interrupts are desired, then set enable bit
TXIE.
5. If 9-bit transmission is desired, then set transmit
bit TX9.
6. Enable the transmission by setting bit TXEN,
which will also set bit TXIF.
7. If 9-bit transmission is selected, the ninth bit
should be loaded in bit TX9D.
8. Load data to the TXREG register (starts
transmission).

hierbij zie ik bij de eerste stap al iets min of meer belangrijks die wij allen hier vergeten.

Morgen zal ik dit dan ook eens uittesten vanaf als de griekse god Chronos het mij toelaat.

echter als ik eventjes doorlees naar de 2e stap stoot ik op een probleem, volgens de datasheet, hoofdstuk 12.1 moet ik de BRGH instellen op 0 en een decimale waarde van 32 inladen in de SPBRG.

weet echter iemand hoe ik deze SPBRG waarde kan inladen in basic? (adres 99h)

!overload! to much information in this signature!

Waarom probeer je niet eerst de softwarematigue uart?

euh,

mijn ervaring met RS232 is 0 zoals je waarschijnlijk al gemerkt hebt

als electronica leek ben ik me zelfs nog aan het inwerken in de overinteresante pic en zo leer ik beetje bij beetje ook andere (rand)componenten kennen.

waarmee moet ik beginnen voor die softwarematige uart?

!overload! to much information in this signature!

Als je communicatie gaat doen stuur je de informatie over een draad door op de juiste momenten de lijn hoog of laag te maken. Dit kan je de pic laten doen, je kan het ook zelf in de software doen. Kijk eens in de help.

Op 31 juli 2009 01:21:27 schreef keuninkske:
hierbij zie ik bij de eerste stap al iets min of meer belangrijks die wij allen hier vergeten.

Je moet idd eerst bepaalde registers juist zetten.
In het volgende topic heb ik een voorbeeld gegeven hoe dit gedaan wordt in C voor een AVR, ik neem aan dat dit niet zo heel verschillend moet zijn in basic ?

Note: ik heb geen ervaring in pic basic :)

Het topic > http://www.circuitsonline.net/forum/view/75372
Helemaal onderaan.

slimme mensen vinden oplossingen, genieën vinden problemen.

Dit kun je ook nog proberen...

code:


DEVICE 16F628A             
CONFIG XT_OSC,WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
XTAL 20

ALL_DIGITAL TRUE   

star:
 PORTB.2=PORTB.1
GOTO star

END

Alle seriele date die naar de PIC toe wordt gestuurd wordt gelijk terug gestuurd. Weet je in iedergeval zerker dat alles goed aangsloten zit en dat de PIC "loopt".

"If I would have listened to my customers, I would have invented a faster horse." - Henry Ford

oké,

voor dit projectje heb ik eventjes niet zoveel tijd meer door mijn herexamens, andere hobby (zie link in mijn onderschrift) en mijn vriendin.

ik hoop het na de herexamens ofwel tussendoor nog eens op de tafel te kunnen gooien. Ik verwacht hiervoor een maandje pauze dus.

verdere hulp is natuurlijk altijd welkom.(ps: af en toe blijf ik het forum volgen)

!overload! to much information in this signature!