pic16f628 uart + linux

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Krida
Příspěvky: 21
Registrován: 28 pro 2008, 01:00
Bydliště: Savín
Kontaktovat uživatele:

pic16f628 uart + linux

#1 Příspěvek od Krida »

Zdravím, snažím se už jak dlouho rozjet komunikaci procesoru s počítačem přes COM port a pořád se mi nedaří. Používám hardwarové uart. Když pošlu z počítače do procesoru pomocí příkazu

Kód: Vybrat vše

echo -ne "a" > /dev/ttyS0
procesor přijme hodnotu 0x4F místo 0x61, když pošlu z procesoru do počálu hodnotu právě 0x4F tak přijde 0x61. To by ještě nebylo tak hrozny, v přenosu z počítače do procesoru jsem našel souvislosti a napsal si algoritmus který ty hodnoty převede na správny.
Když ale pošlu z počítače znak b (0x62) procesor přijme 0x27 (to by můj algoritmus převedl na 0x62), když pošlu těch 0x27 zpátky do počálu tak přečte hodnotu 0xb1.

Když sem nechal posílat procesor do počítače všechny hodnoty 0-255 u žádné jsem nepřečetl hodnotu b,d,f,h..... takže tady mi už žádné přepočet nepomuže, můžete mi někdo pls poradit co dělám špatně? diky moc

Uživatelský avatar
rnbw
Příspěvky: 32312
Registrován: 21 bře 2006, 01:00
Bydliště: Bratislava

#2 Příspěvek od rnbw »

Mas spravne nastavene parametre serioveho portu (setserial)?

Krida
Příspěvky: 21
Registrován: 28 pro 2008, 01:00
Bydliště: Savín
Kontaktovat uživatele:

#3 Příspěvek od Krida »

jestli mysliš nastaveni portu v počálu tak mám přesně takovy a myslim že by to mohlo byt správně

Kód: Vybrat vše

speed 9600 baud; rows 0; columns 0; line = 0;
intr = <undef>; quit = <undef>; erase = <undef>; kill = <undef>; eof = <undef>; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = <undef>; stop = <undef>; susp = <undef>; rprnt = <undef>;
werase = <undef>; lnext = <undef>; flush = <undef>; min = 1; time = 5;
-parenb -parodd cs8 hupcl -cstopb cread clocal -crtscts
ignbrk -brkint ignpar -parmrk inpck -istrip -inlcr -igncr -icrnl -ixon ixoff -iuclc -ixany imaxbel -iutf8
-opost -olcuc -ocrnl -onlcr onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
-isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase -tostop -echoprt -echoctl echoke
a ještě k tomu sem zkoušel všechno možny měnit vypinat zapinat a chodilo to furt stejny

Uživatelský avatar
honza_jan
Příspěvky: 425
Registrován: 22 lis 2007, 01:00
Bydliště: Doma

#4 Příspěvek od honza_jan »

Podívej se, jakou nadefinovanou komunikaci očekává procesor a podle toho nadefinuj port na počitači. Definuje se obvykle pro asynchronní přenos rychlost, počet datových bitů, parita a stopbity. Záleží na tom, co která strana chce a umí. Jakmile je něco špatně, tak to je stejná komunikace, jako když mluví "ostravak" s "vyhodňarom" :lol: Podle toho vypadá i výsledek. Taky je dobré ošetřit handshaking. Víc ti toho ale neprozradím, protože od dob osmibitů jsem to nepotřeboval řešit. To je víc jak 20 let a poločas zapomínání funguje v mém věku už perfektně.

edit: Tady je pro tebe část zajímavých informací: http://www.dhservis.cz/dalsi_1/bc_prace.htm

Uživatelský avatar
Atlan
Příspěvky: 4499
Registrován: 10 kvě 2004, 02:00
Bydliště: Košice

#5 Příspěvek od Atlan »


Krida
Příspěvky: 21
Registrován: 28 pro 2008, 01:00
Bydliště: Savín
Kontaktovat uživatele:

#6 Příspěvek od Krida »

přesně z toho jsem vycházel

Andrea
Příspěvky: 9340
Registrován: 07 zář 2007, 02:00

#7 Příspěvek od Andrea »

A jak to máš zadrátované na straně toho PICu, co tam máš za převodník na RS-232?

Uživatelský avatar
meereck
Příspěvky: 55
Registrován: 09 bře 2008, 01:00

#8 Příspěvek od meereck »

odpoj PIC a na TTL vystupu z prevodniku (napr. MAX232) propoj TX a RX piny a zjisti, jestli to zapojeni prevodniku funguje.

Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“