Subversion Repositories svnkaklik

Compare Revisions

Ignore whitespace Rev 307 → Rev 308

/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>