Komunikace PIC12F629 přes RS232

Ahoj,
nemá prosím někdo hotový kód pro Micochip PIC12F629 aby mohla odesílat (jde mi hlavně o odesílání) data do počítače přes RS232-TTL?

Potřebuji udělat program pro 12F629 s externím krystalem 32768 Hz, který by odesílal data, ale totálně nechápu jak, protože tahle PICka narozdíl od např. 16F877A nemá hardwarový USART…

Předem děkuji :slight_smile:.

Softwarové RS232 je pro 12F675/629 běžně na webu. Stačí se podívat. Ovšem vzhledem k tomu, že chceš použít krystal 32768Hz, tak je to v tvém případě téměř nerealizovatelné. Budeš se muset zamyslet a z něčeho slevit.

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

Martine, vím, že tomu docela rozumíš. A taky bych to asi nějak dokázal naprogramovat sám. Ale z formulace dotazu je viditelné, že Lukáš v tom ještě nemá úplně jasno. Nejspíš se snaží udělat složitě něco, co jde udělat velmi jednoduše. Předpokládám, že nám svoje záměry trochu objasní. Tvůj slovní popis je brilantní, ale Lukášovi nejspíš nebude stačit.

Mnohokrát oběma děkuji. Martinův popis je opravdu skvělí, ale pochybuji, že to dám dokupy. Zatím jsem v programování PIC moc daleko nedošel.

Kamarád, který programuje normální PC aplikace mě prosí, abych mu dal dokupy takovouto krabičku, která mu prostě po zmáčknutí tlačítka odešle data na séiový port.

Pokud nemůžu použít 32k krystal, nevadí. Použiji jiný. Jen nejsem za nic na světě schopen najít ten SW RS232, o kterém mluvil jankop. Už Googluji tři dny v angličtině i češtině a začíná mě to pěkně štvát :slight_smile: Vím že moc otravuji, ale nemohl bys mi prosím jankope napsat nějaký web, kde to najdu?

A nebo existuje nějaká PICka s 8mi vývody, kompatibilní s 12F629, která má HW sériový port jako 16F877A, kde jen stačí nastavit pár bitů a už odesílám?
Díval jsem se zde:
microchip.com/ParamChartSear … &pageId=74
a píšou tam, že PIC12F609 a PIC12F615 má USART. Stáhl jsem si datasheet, ale nikde na obrázku popisujícím vývody nebylo Tx, jako u 16F877A. Tak teď nevim, jestli se Microchip sekl nebo co.

Microchip nic takového netvrdí, špatně se díváš, jsou tam nuly.
O sériové komunikaci malých PIC12F675/629 jsou na webu desítky odkazů. Dva za všechny včetně HW
wrankl.de/SMST4PIC/SMST4PIC.html
pandatron.info/elektronika/clane … &clanek=18

Ouuuuaaa! Mnohokrát děkuji, s tím se už dá něco udělat.

Co se týče toho Microchip webu, tak jsi mě dostal :slight_smile:. Prostě jsem si přečetl, že je tam napsáno USART a stačilo mi to :slight_smile:. Stejně to ale mají pitomě - u ostatních nemají nic napsané, ale u PIC12F508, PIC12F609 a PIC12F615 tam mají nulu. Tož, tak ať píšou nuly všude nebo nikde :smiley: