Subversion Repositories svnkaklik

Compare Revisions

Ignore whitespace Rev 306 → Rev 307

/programy/Atmel_C/RS232toRS485/P232.c
9,7 → 9,18
// delka vzorku 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.)
//
// 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.
//
//Vlastnosti:
// Tento program je shopen detekovat pararitní bit, ale neni shopen detekovat poèet stopbitù.
// To znamená že když bude parita logická jedna, tak bude rozpoznána jako stop bit.
// Tato vlastnost ale pøíliš nevadí, protože chování algoritmu lze upravit tak, že bude predpokládat dva nebo tøi stopbity.
// V takovém pøípadì se packet pøenese korektnì i když parita bude jedna, i nula.
//
// Tento zpusob detekce neni imuni proti nahodnym chybovim spickam vzniklych v dusledku ruseni.
// Proto je nutene napajeni kvalitne stbilizovat, pouzivat blokovaci kondenzatory a
// zabezpecit, aby nedochazelo ke zvedani zeme.
22,6 → 33,8
// Program neni vyzkousen pri extremne nizkych rychlostech, kdy by teoreticky
// mohlo dochazet k preteceni promenne cas.
// 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
//////////////////////////////////////////////////////////////////////////////////////
//
 
61,9 → 74,14
int main(void)
{
int stopbit;
int ctvrtbit;
 
// DDRD |= (1<<DDD5); // povoleni vystupu pro blikani ledkou (mozno odebrat)
/*typedef struct { // struktura pro celoèíselné dìlení
int quot;
int rem;
} div_t;*/
 
 
DDRB |= (1<<DDB3); // povoleni vystupu na povolovak
 
TIMSK |= (1 << TOIE0); // Enable timer overflow interrupt
88,15 → 106,17
while (bit <= 8) // odpocitej dobu 8mi bitu
{
if ((100+TCNT0+preteceni*0x0100) >= cas) // zkontroluj jestli necekame na dalsi bit dele nez je nekratsi znema delka bitu
if ((TCNT0+preteceni*0x0100) >= (cas + (ctvrtbit = cas >> 2))) // zkontroluj jestli necekame na dalsi bit dele nez je nekratsi znema delka bitu
// v kontrole je rezerva delky ctvrt bitu
{
TCNT0 = 0; // zacni znova merit cas do dalsiho mozneho bitu
preteceni=0;
bit++; // pokud jsme cekali dele, tak bit uz ubehl, to znamena, ze muzeme pocitadlo bitu posunout o jednicku
// div(ctvrtbit,0x0100); // funkce pro implementaci celociselneho deleni zustava ale nepouzita kvuli nutnosti zavest datove struktury, bude ji nutno pouzit pro vetsi rychlosti
TCNT0 = ctvrtbit % 0x0100; //reminder; // zacni znova merit cas do dalsiho mozneho bitu
preteceni = ctvrtbit/0x0100; //quota;
}
}
 
/* while (!DATA); // cekani na stop bit (detekce pripadneho paritniho bitu)
while (!DATA); // cekani na stop bit (detekce pripadneho paritniho bitu)
 
for (stopbit=2;stopbit >= 0;stopbit--) // odpocitej dva stopbity
{
104,7 → 124,7
{
if(!DATA) break;
}
}*/
}
}
else POVOLOVAK_LOW; // kdyz je 1 prepni na prijem
}
/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,7 → 1,7
:1000000012C02AC041C028C027C026C026C024C0B4
:1000100023C022C021C020C01FC01EC01DC01CC0E4
:100020001BC01AC019C011241FBECFEDCDBF10E0F8
:10003000A0E6B0E0EAEAF1E003C0C89531960D927F
:10003000A0E6B0E0E2E5F2E003C0C89531960D928B
:10004000A036B107D1F710E0A0E6B0E001C01D92E4
:10005000A836B107E1F758C0D3CF1F920F920FB661
:100060000F9211248F939F9380916200909163006F
16,13 → 16,24
:1000F0006700809366009F918F913F912F910F90A1
:100100000FBE0F901F901895BB9A89B7826089BF68
:1001100085B7846085BF8BB780688BBF83B78160EC
:1001200083BF78946FEF7FEF83993DC0C39A10929D
:1001300067001092660012BE109263001092620077
:1001400070936500609364008091660090916700F1
:10015000099750F782B72091620030916300409177
:10016000640050916500322F222799278C599F4FA8
:10017000280F391F2417350738F312BE1092630079
:1001800010926200809166009091670001969093B2
:1001900067008093660080916600909167000997E0
:0A01A000C8F2839BC3CFC398BFCF02
:1001200083BF789483996AC0C39A10926700109233
:10013000660012BE10926300109262008FEF9FEF74
:1001400090936500809364008091660090916700B1
:100150000997C0F542B72091620030916300E091A9
:100160006400F0916500F695E795F695E795809126
:10017000640090916500322F2227240F311D8E0FCD
:100180009F1F2817390700F3809166009091670040
:10019000019690936700809366008E2F9F2F60E0FA
:1001A00071E02ED082BF8E2F9F2F892F990F990B30
:1001B0009093630080936200809166009091670045
:1001C000099740F2839BFECF62E070E082B72091F6
:1001D0006200309163004091640050916500322FBD
:1001E0002227280F311D4217530710F08399EECFB5
:1001F0006150704077FFEACF839B96CFC39892CF30
:1002000097FB092E07260AD077FD04D00CD006D024
:1002100000201AF4709561957F4F0895F6F7909538
:1002200081959F4F0895AA1BBB1B51E107C0AA1FD0
:10023000BB1FA617B70710F0A61BB70B881F991F87
:100240005A95A9F780959095682F792F8A2F9B2F23
:0202500008950F
:00000001FF
/programy/Atmel_C/RS232toRS485/rs485.aws
1,0 → 0,0
<AVRWorkspace><IOSettings><CurrentRegisters/></IOSettings><part name="ATtiny2313"/><Files><File00000 Name="C:\E240\ass3\program\Atmel_C\RS232toRS485\P232.c" Position="-2 71 1026 523" LineCol="87 32" State="Maximized"/></Files></AVRWorkspace>
<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>