/programy/Atmel_C/RS232toRS485/P232.c |
---|
2,18 → 2,23 |
// Prevodnik RS232 <--> RS485 |
// pri startbitu na RS232 zapne okamzite vysilac pokud nejsou detekovana data z RS485. |
//---------------------------------------------------------------------------------- |
//Program je urcen k rizeni toku dat v prevodniku RS232 na RS485. S cilem eliminovat jakekoliv prvky nastavovene uzivatelem |
//bez nutnosti pouziti hardwaroveho rizeni toku. Program tedy dokaze detekovat prenosovou rychlost, paritni bit a stopbit. |
// |
// |
//Algoritmus: |
// Princip je zalozen na mereni nejkratsiho casoveho useku v osmi vzorcich, delka vzorku |
// se odviji od velikosti prave nejmensiho zmereneho vzorku. |
// delka vzorku se meri pomoci 8mi bitoveho casovace a interruptu od zmeny vstupu. casovac je osetren |
// Vzorek se meri pomoci 8mi bitoveho casovace a interruptu od zmeny vstupu. casovac je osetren |
// proti pretekani (pocet preteceni se uklada, do promenne s ktere se zpetne vypocita 16bitove cislo, |
// casovac se tedy virtualne chova jako 16ti bitovy.) |
// Mereni delky bitu |
// |
// Aktualni implementace teto metody se chova tak, ze pokud je vyslan bajt ktery po startbitu obsahuje N |
// stejnych bitu, tak je tato sekvence detekovana jako jeden bit to zpusobi ze detekovana rychlost je N krat |
// mensi, nez skutecna. Dusledkem je, ze pokud se jeste pred stopbitem neobjevi samostatny bit s jinou hodnotou, |
// nez predchozi sekvence. |
// nez predchozi sekvence. Tak bude vysílání povoleno po dubu osminásobku zmìøené délky "bitu" plus dalí dva bity jako stopbity. |
// |
// |
//Vlastnosti: |
// Tento program je shopen detekovat pararitní bit, ale neni shopen detekovat poèet stopbitù. |
30,8 → 35,7 |
// Optimalizovat kod, (hlavne najit casove vyhodnejsi umisteni pro nastavovani defaultnich hodnot promennych) |
// Bylo bydobre zavest uspavani pred prijetim bajtu. |
// Vykouset program na ATtiny13 |
// Program neni vyzkousen pri extremne nizkych rychlostech, kdy by teoreticky |
// mohlo dochazet k preteceni promenne cas. |
// Pri rychlostech mensich nez 9600kbps dochazi k pretekani promennych a algoritmus se nechova korektne. |
// Neni vyzkousen break, byly testovany pouze ASCII znaky vysilane pres terminal z klavesnice. |
// Aktivovat WatchDog timer. |
// Neni vyzkouseno na vyssím taktu CPU jak 3,7MHz |
52,8 → 56,8 |
volatile unsigned int preteceni; // promenna na ukladani poctu preteceni casovace |
volatile unsigned int bit; // promena pro pocitani bitu v bajtu |
volatile unsigned int bitdelay; // obsahuje aktualni zmereny cas delky bitu |
volatile unsigned int cas; // urcuje nejkratsi nalezeny cas delky bitu |
volatile unsigned long int bitdelay; // obsahuje aktualni zmereny cas delky bitu |
volatile unsigned long int cas; // urcuje nejkratsi nalezeny cas delky bitu |
ISR(TIMER0_OVF_vect) // interrupt od preteceni casovace |
{ |
62,7 → 66,7 |
ISR(INT1_vect) // interrupt od zmeny vstupu na datech |
{ |
if ((bitdelay=TCNT0+preteceni*0x0100) < cas) cas = bitdelay; // provnani jestli zrovna zmereny cas je kratsi nez nejmensi znamy cas |
if ((bitdelay=(TCNT0+preteceni*0x0100)) < cas) cas = bitdelay; // provnani jestli zrovna zmereny cas je kratsi nez nejmensi znamy cas |
TCNT0 = 0; // zacni znova merit cas zacatku stopbitu |
preteceni=0; // vynuluj vsechny casove promenne |
bit++; // posun pocitadlo bitu o jednicku |
99,9 → 103,9 |
{ |
POVOLOVAK_HIGH; // zapni vysilani |
bit=0; // vynuluj vsechny promenne pro mereni casu a pocitani bitu |
TCNT0=0; |
preteceni=0; |
bit=0; // vynuluj vsechny promenne pro mereni casu a pocitani bitu |
cas = 0xFFFF; // nastav cas delky bitu na nejvetsi mozny |
while (bit <= 8) // odpocitej dobu 8mi bitu |
/programy/Atmel_C/RS232toRS485/default/rs485.elf |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/programy/Atmel_C/RS232toRS485/default/rs485.hex |
---|
1,39 → 1,49 |
:1000000012C02AC041C028C027C026C026C024C0B4 |
:1000100023C022C021C020C01FC01EC01DC01CC0E4 |
:100020001BC01AC019C011241FBECFEDCDBF10E0F8 |
:10003000A0E6B0E0E2E5F2E003C0C89531960D928B |
:10003000A0E6B0E0ECEFF2E003C0C89531960D9277 |
:10004000A036B107D1F710E0A0E6B0E001C01D92E4 |
:10005000A836B107E1F758C0D3CF1F920F920FB661 |
:100060000F9211248F939F9380916200909163006F |
:10007000019690936300809362009F918F910F90FF |
:10005000AC36B107E1F778C0D3CF1F920F920FB63D |
:100060000F9211248F939F9380916400909165006B |
:10007000019690936500809364009F918F910F90FB |
:100080000FBE0F901F9018951F920F920FB60F92F0 |
:1000900011242F933F938F939F9322B780916200F7 |
:1000A00090916300982F8827820F911D9093610093 |
:1000B0008093600020916000309161008091640025 |
:1000C000909165002817390740F480916000909165 |
:1000D0006100909365008093640012BE10926300EB |
:1000E0001092620080916600909167000196909353 |
:1000F0006700809366009F918F913F912F910F90A1 |
:100100000FBE0F901F901895BB9A89B7826089BF68 |
:1001100085B7846085BF8BB780688BBF83B78160EC |
:1001200083BF789483996AC0C39A10926700109233 |
:10013000660012BE10926300109262008FEF9FEF74 |
:1001400090936500809364008091660090916700B1 |
:100150000997C0F542B72091620030916300E091A9 |
:100160006400F0916500F695E795F695E795809126 |
:10017000640090916500322F2227240F311D8E0FCD |
:100180009F1F2817390700F3809166009091670040 |
:10019000019690936700809366008E2F9F2F60E0FA |
:1001A00071E02ED082BF8E2F9F2F892F990F990B30 |
:1001B0009093630080936200809166009091670045 |
:1001C000099740F2839BFECF62E070E082B72091F6 |
:1001D0006200309163004091640050916500322FBD |
:1001E0002227280F311D4217530710F08399EECFB5 |
:1001F0006150704077FFEACF839B96CFC39892CF30 |
:1002000097FB092E07260AD077FD04D00CD006D024 |
:1002100000201AF4709561957F4F0895F6F7909538 |
:1002200081959F4F0895AA1BBB1B51E107C0AA1FD0 |
:10023000BB1FA617B70710F0A61BB70B881F991F87 |
:100240005A95A9F780959095682F792F8A2F9B2F23 |
:0202500008950F |
:1000900011242F933F934F935F938F939F93AF932D |
:1000A000BF9322B78091640090916500982F8827B4 |
:1000B000820F911DAA27BB27809360009093610057 |
:1000C000A0936200B09363002091600030916100C2 |
:1000D00040916200509163008091660090916700AA |
:1000E000A0916800B0916900281739074A075B079B |
:1000F00080F48091600090916100A0916200B091C5 |
:1001000063008093660090936700A0936800B093AB |
:10011000690012BE109265001092640080916A001E |
:1001200090916B00019690936B0080936A00BF9151 |
:10013000AF919F918F915F914F913F912F910F9030 |
:100140000FBE0F901F901895AF92BF92CF92DF9283 |
:10015000EF92FF920F931F93BB9A89B7826089BF7A |
:1001600085B7846085BF8BB780688BBF83B781609C |
:1001700083BF7894839994C0C39A12BE109265008D |
:100180001092640010926B0010926A008FEF9FEF44 |
:10019000A0E0B0E08093660090936700A0936800B1 |
:1001A000B093690080916A0090916B00099708F004 |
:1001B00053C082B72091640030916500A090660022 |
:1001C000B0906700C0906800D0906900D694C79442 |
:1001D000B794A794D694C794B794A794E090660078 |
:1001E000F09067000091680010916900322F22277B |
:1001F000280F311D442755278A2D9B2DAA2797FDAF |
:10020000A095BA2F8E0D9F1DA01FB11F281739076B |
:100210004A075B0738F280916A0090916B00019663 |
:1002200090936B0080936A009B2D8A2D60E071E0B3 |
:100230003CD082BF9B2D8A2DB7FC34C0892F990FEB |
:10024000990B909365008093640080916A0090916F |
:100250006B00099708F4ADCF839BFECF62E070E09E |
:1002600082B72091640030916500E0906600F090C4 |
:1002700067000091680010916900322F2227280F33 |
:10028000311D44275527E216F3060407150710F021 |
:100290008399E6CF6150704077FFE2CF839B6CCFAC |
:1002A000C39868CF81509F4FC9CF97FB092E07266F |
:1002B0000AD077FD04D00CD006D000201AF4709537 |
:1002C00061957F4F0895F6F7909581959F4F08951A |
:1002D000AA1BBB1B51E107C0AA1FBB1FA617B7076C |
:1002E00010F0A61BB70B881F991F5A95A9F7809588 |
:0C02F0009095682F792F8A2F9B2F08957E |
:00000001FF |
/programy/Atmel_C/RS232toRS485/rs485.aws |
---|
1,0 → 0,0 |
<AVRWorkspace><IOSettings><CurrentRegisters/></IOSettings><part name="ATTINY2313"/><Files><File00000 Name="D:\RS232toRS485\P232.c" Position="113 71 708 422" LineCol="121 1" State="Maximized"/></Files></AVRWorkspace> |
<AVRWorkspace><IOSettings><CurrentRegisters/></IOSettings><part name="ATTINY2313"/><Files><File00000 Name="C:\E240\ass3\program\Atmel_C\RS232toRS485\P232.c" Position="156 71 914 523" LineCol="131 6" State="Maximized"/></Files></AVRWorkspace> |