Komunikace PIC12F629 přes RS232

Lukas spomynal, ze potrebuje data z PICu vysielat, mozno nepotrebuje prijem.
Ak PIC spravi s 32kHz Xtalom 8192 instrukcii, ,moze komunikaciu spravit tak, ze najprv si nieco spracuje co potrebuje a potom v jednej sw slucke odvysiela bajt po bajte.

Ak by chcel komunikovat rychlostou 1200Bd, potom jeden bit bude trvat cca 6.82 instrukcie. Ak dodrzis medzi start bitom a prvymi siestimi bitmi 7 instrukcii a medzi poslednymi dvoma bitmi bude 6 instrukcii, chyba bude cca 0.6%, co je celkom OK. Aj tych 7 instrukcii by to myslim hravo zvladlo vsade.

Jeden z moznych postupov:

  1. na linku vysli log.0 - start bit

  2. nacitaj si prvy bit, ktory chces vyslat.

  3. Dopln cinnost v bodoch 1 a 2 tak, aby ti to cele trvalo 7 instrukcii

  4. na linku nastav hodnotu 2. bitu z bajtu

  5. nacitaj si dalsi bit, ktory chces vyslat - urcite ma PIC instrukciu rotovania napr cez CY.

  6. Dopln cinnost v bodoch 4 a 5 tak, aby ti to cele trvalo 7 instrukcii

  7. na linku nastav hodnotu 3. bitu z bajtu
    8 ) nacitaj si dalsi bit, ktory chces vyslat

  8. Dopln cinnost v predchadzajucich dvoch bodoch tak, aby ti to cele trvalo 7 instrukcii

na linku nastav hodnotu 8. bitu z bajtu
nacitaj si dalsi bit, ktory chces vyslat
Dopln cinnost v predchadzajucich dvoch bodoch tak, aby ti to cele trvalo 6instrukcii

na linku nastav log.1 - stop bit
pockaj do 7(1 stop bit) az 14(2 stop bity) instrukcii - Ak priprava dalsieho bajtu trva dlhsie ako 14 instrukcii, mozes to cakanie kludne vynechat, ale vystup urcite musis nastavit na log.1

chod si pripravit dalsi bajt na odvysielanie a znovu spusti hore uvedenu sekvenciu.
Takto mozes do PC kludne posielat spravy rychlostou 1200Bd.

Cas medzi vysielanim jednotlivych bajtov nie je kriticky - nehovorim o protokoloch ako Modbus RTU :wink:, takze mas hafo casu. Dolezite je dodrzat cas medzi jednotlivymi bitmi s presnostou aspon cca 2%

S prijmom to vidim dost problematicke. Volakedy som programoval sw UART na PIC 16C84 a pri Xtale 9.6MHz (alebo polovicny? uz som si neni velmi isty) som sa dostal na 19200Bd. Viac to jednoducho neslo a aj to uz bolo problematicke, lebo pod jednym prerusenim siel aj casovac, takze spolahlivo len 9600Bd. Jednoduchym vydelenim pomerov Xtalov mi vychadza, ze sa mozes pre prijem i vysielanie dostat tak na 32Bd (64Bd?) rychlost, akurat, ze tu PC nepodporuje :frowning:.

Ak chces vysielanie iniciovat z PC a nepotrebujes moduly adresovat ci do nich posielat nejake udaje, mozes to vyriesit i tak, ze cez TX z PC vysles do stanice jeden bajt, napr 0x80 alebo 0x30 (‘0’). TX z PC prived na interupt do PIC. Tak zaregistrujes, ze PC od procesora nieco chce. 0x80 bude drzat linku 5.8ms v log. 0, za tu dobu PIC spravi skoro 48 instrukcii, mozno sa ti tam zmesti aj sw kontrola poziadavku z PC na zaslanie udajov, ak interupt pouzivas na nieco ine.

Daj vediet, ako to dopadlo.

Martin