Hey hey,
Meestal lees ik vooral de topics op dit forum. Echter loop ik nu toch echt ergens tegen aan wat volgens mij niet eerder behandeld is.
Situatie:
Ik laat een 18F4520 communiceren met een PC. Dit gaat opzich goed (ik zie dat de pic data ontvangt, en hij kan ook data zenden).
Echter krijg ik met HSEROUT allemaal vreemde tekens in mijn terminal.
Simpelweg
HSEROUT ["TEST"]leverd een aantal mooie ascii tekens op in mijn terminal zonder enige betekenis.
Mijn vraag:
Hoe stuur ik "plain" tekst over een serieele poort?
Mvg
Je moet ervoor zorgen dat de instelling van het serieel signaal in de terminal en de PIC gelijk zijn
(De snelheid in baud/s, het aantal stop of pariteitsbits etc)
Deze staat waarschijnlijk in de datasheet van je PIC, of in de PicBASIC handleiding.
Daarna gewoon die instelling overnemen in je terminal (persoonlijk zou ik putty gebruiken als terminal)
succes!
jovak
meten is weten, weten is meten, maar hoe kan je weten wat je allemaal moet meten en weten.
Hoe is je microcontroller aan gesloten op je terminal?
Gebruik je een driver als de MAX232, MAX233 ? of zit je op TTL nivo te communiceren ?
Baudrate?
start stopbits ok?
parity?
terminal in 7 bits en uC in 8 bits?
putty gebruik ik ook (super tool voor com & ssh werkzaamheden
)
Ik declare de waardes in picbasic
HSERIAL_BAUD = 9600
HSERIAL_RCSTA = $90
HSERIAL_TXSTA = $24
HSERIAL_SPBRG = 129
HSERIAL_CLEAR = ON
in putty geef ik het volgende op:
9600 8n1
Rest van de instellingen ook op no (dts, xor)
Ik dacht inderdaad eerst ook dat het met de snelheid van doen had, maar volgens mij staat die goed.
@antwoord2: er zit een max232 tussen
[Bericht gewijzigd door Henry S. op (4%)]
Fuzzbass
Mijn echte naam: Joris | Mijn elektronica website: Fuzzcraft.com
Ik heb laatst exact hetzelfde probleem gehad met een arm, het was de baudrate die niet overeenkwam, kijk op een scope wat je denkt uit te sturen en wat je daadwerkelijk uitstuurd. Bij ons was het namelijk dat de snelheid in de arm te hoog was ingesteld.
Op 6 juni 2009 23:29:40 schreef hp197:
putty gebruik ik ook (super tool voor com & ssh werkzaamheden)
Ik declare de waardes in picbasic
HSERIAL_BAUD = 9600 HSERIAL_RCSTA = $90 HSERIAL_TXSTA = $24 HSERIAL_SPBRG = 129 HSERIAL_CLEAR = ONin putty geef ik het volgende op:
9600 8n1Rest van de instellingen ook op no (dts, xor)
Ik dacht inderdaad eerst ook dat het met de snelheid van doen had, maar volgens mij staat die goed.
klopt, dat krijg je als je het high speed bitje niet hoog maakt.
probeer dit eens:
HSERIAL_BAUD = 9600 ' Set baud rate to 9600
HSERIAL_RCSTA = %10010000 ' Enable serial port and continuous receive
HSERIAL_TXSTA = %00100100 ' Enable transmit and asynchronous mode
HSERIAL_CLEAR = On ' Optionally clear the buffer before receiving
[Bericht gewijzigd door VWG3JB op (33%)]
elmowww
PA0EJE - www.eje-electronics.nl - e.jongerius[aapje]eje-electronics.nl - EJE Electronics - Elektronica/firmware ontwikkeling
Check eventjes de output die je krijgt: klopt het aantal karakters? Zoja, kijk eens of ze bitwise inverted zijn. Zonee, check je baudrate, stopbits en pariteiten.
Bedankt voor jullie reacties, ik zal zo even proberen of dat werkt.
Ik gebruik overigens een wisp648 in serial passthrough modus. Als ik de rx en tx draden met elkaar verbind na de wisp648 echoot hij normaal mijn tekens terug naar de terminal (dus je mag aannemen dat dat allemaal goed werkt).
Ik ben alles nog een keer aan het testen en kom er net achter dat ik in ISIS hetzelfde probleem heb
http://img521.imageshack.us/img521/5751/testaif.png
Code:
Device = 18f4520
CONFIG_START
OSC = HS
PWRT = On ; Power Up Timer Enabled
WDT = OFF ; Watchdog Timer Disabled
MCLRE = OFF ; MCLR disabled
STVREN = On ; Stack Overflow Reset Enabled
LVP = OFF ; Low Voltage ICSP Disabled
CONFIG_END
all_digital TRUE
XTAL 10
HSERIAL_BAUD = 9600 ' Set baud rate to 9600
HSERIAL_RCSTA = %10010000 ' Enable serial port and continuous receive
HSERIAL_TXSTA = %00100100 ' Enable transmit and asynchronous mode
HSERIAL_CLEAR = On ' Optionally clear the buffer before receiving
dim teller as byte
while 1=1
toggle porta.1
HSerOut ["Teller = ", dec2 teller, "\r\n"]
teller = teller + 1
DELAYMS 1000
wend
end
Output geeft in virtual terminal:
HEX: 55 D3 D2 52 D3 A3 2B BF 9F 9D
TEXT: UÓÒRÓ£+¿Ÿ�
Beide is teller = 1
Virtual terminal staat op 9600 8n1 en rx/tx not inverted.
Doe ik nu iets dramatisch fout?
[Bericht gewijzigd door Henry S. op (0%)]
elmowww
PA0EJE - www.eje-electronics.nl - e.jongerius[aapje]eje-electronics.nl - EJE Electronics - Elektronica/firmware ontwikkeling
Sluit dat ding eens rechtstreeks aan op een compoort met hyperterminal?
Ik weet niet wat die passtrough mode precies (hardwarematig) doet, en ik weet niet of dat ding RS232 niveaus aankan.
Watvoor compoort gebruik je?
Lees de handleiding van je wisp eens?
The common asynchronous serial communication (as used by the PC serial port) uses RS232
voltage levels and polarity. These PIC UART pins use TTL (0 .. 5V) levels and inverted polarity
(inverted with respect to the RS232 line levels). A MAX232 or an equivalent chip is the standard
way to interface between the TTL signals and the RS232 signals. But some dirt-cheap PIC circuits
interface the PIC pins directly to the RS232 signals. This violates all design rules and
specifications, but sometimes it works. Note that in this situation the TTL signals have the same
polarity as the RS232 signals. Hence a PIC UART can not be used, because it uses inverted
polarity.
http://www.voti.nl/wisp648/wisp648.pdf
[Bericht gewijzigd door Henry S. op (63%)]
HSerOut ["Teller = ", dec2 teller, "\r\n"]
daar zit je fout
je kan niet tekst bij de rs232 poort aanbieden
HSerOut [116,101,108,108,101,114]
nu moet er teller op je scherm staan.
je moet de tellerwaarde nog wel +48 want de acciwaarde van 0 is 48.
De serial Pass-through van de wisp648 is beperkt in baudrate.
uit de manual p5: "This pass-through is done in the Wisp648
firmware, so it is limited to lower baudrates (up to 9600 baud seems to work OK)."
/e: dit zou geen probleem mogen geven, maar toch maar eens ter info..
[Bericht gewijzigd door hidnplayr op (15%)]
plantrekker
True story bro!
Voor hp197 en elmowww: Niet de edit vergeten. http://www.circuitsonline.net/forum/faq#topickicks
elmowww
PA0EJE - www.eje-electronics.nl - e.jongerius[aapje]eje-electronics.nl - EJE Electronics - Elektronica/firmware ontwikkeling
Op 7 juni 2009 16:11:45 schreef VWG3JB:
HSerOut ["Teller = ", dec2 teller, "\r\n"]daar zit je fout
je kan niet tekst bij de rs232 poort aanbiedenHSerOut [116,101,108,108,101,114]
nu moet er teller op je scherm staan.
je moet de tellerwaarde nog wel +48 want de acciwaarde van 0 is 48.
Wat daar staat is hartstikke correct. In picbasic wordt dat allemaal netjes als leesbare tekst verzonden.
Wat ts verkeerd doet:
Hoge baudrate ("zou moeten werken" vertrouw ik niet), level shifter, hardware uart enz. enz.
Zoals aangegeven
Op 7 juni 2009 16:11:45 schreef VWG3JB:
HSerOut ["Teller = ", dec2 teller, "\r\n"]daar zit je fout
je kan niet tekst bij de rs232 poort aanbiedenHSerOut [116,101,108,108,101,114]
nu moet er teller op je scherm staan.
je moet de tellerwaarde nog wel +48 want de acciwaarde van 0 is 48.
Ja, zoeits had ik eerder ook aan gedacht.
Als ik dat echter invoer krijg ik als output:
HEX: 51 D3 D2 52 D3 23
116 word dus 51?¿?
Overigens gebruik jij dec waarden, maar ik heb ook hex en oct waarden proberen te verzenden. Wat ik niet begrijp is dat als ik er aan de ene kant nummer 1 in stop (dmv hserout [1]), ik er aan de terminal zijde 7D hex uit krijg.
Op 7 juni 2009 16:21:34 schreef elmowww:
[...]Wat daar staat is hartstikke correct. In picbasic wordt dat allemaal netjes als leesbare tekst verzonden.
Wat ts verkeerd doet:
Hoge baudrate ("zou moeten werken" vertrouw ik niet), level shifter, hardware uart enz. enz.
ik heb dat zelf geprobeerd, maar dat werkte niet!
ik heb zelf de hserout nog nooit aan de praat gekregen. Probeer het eens zo:
Serout port?.?, getal uit tabel, ["test"]
BaudRate 8-bit no-parity inverted 8-bit no-parity true 7-bit even-parity inverted 7-bit even-parity true
300 19697 3313 27889 11505
600 18030 1646 26222 9838
1200 17197 813 25389 9005
2400 16780 396 24972 8588
4800 16572 188 24764 8380
9600 16468 84 24660 8276 plantrekker
True story bro!
Hij heeft in ISIS hetzelfde probleem dus daar zal het niet aan liggen.
Zet in de virtual terminal van ISIS de parity aan of stopbits op 2, of die 2 samen.
idd plantrekker, omdat ik dezelfde output krijg met de hardware als met isis, weet ik dat het niet ligt aan de hardware. Maar moet het softwarematig ergens fout zitten.
Ik ga ff kloten met parity en stop bits.
Overigens is de picbasic code met ISIS schakeling hier te downloaden: http://www.megaupload.com/?d=6G5UD3ZQ
probleem gevonden!
9600 8n1 & rx/tx polarity moet op inverted staan (in isis virtual terminal). Dan kan ik vanuit picbasic
HRSOUT ["abc"]zenden zonder problemen.
Maar.....
Nu met de hardware.
Wat word er bedoeld met rx/tx polarity, en hoe stel ik dat in in putty?
EDIT:
Hmmmm
Bij inverted mode staat er 0V op de TX pin. Terwijl dat normaal +5V is. verschil tussen RX en TX maakt dat -8.5V. Zet ik inverted uit, dan krijg ik -13.5V op rx ~ tx.
Zou iemand opheldering kunnen geven?
[Bericht gewijzigd door hp197 op (28%)]
plantrekker
True story bro!
0 wordt 1 en 1 wordt 0. Ik werk niet met PIC's maar daar zal het aangepast kunnen worden en in putty ook denk ik.
Bij RS232 stelt -15v tot -3v een 1 voor, 3v tot 15v een nul. De PIC draait het waarschijnlijk om (met de niveau's 0v en 5v dan).
Jeroen Boere
IF you can't convince them, then confuse them!