Elektronika.lt
 2024 m. spalio 9 d. Projektas | Reklama | Žinokite | Klausimai | Prisidėkite | Atsiliepimai | Kontaktai
Paieška portale
EN Facebook RSS

 Kas naujo  Katalogas  Parduotuvės  Forumas  Tinklaraščiai
 Pirmas puslapisSąrašas
 Forumas / + pokalbiai
 - Paieška forume
 - D.U.K. / Forumo taisyklės
 - Narių sąrašas
 - Registruotis
 - Prisijungti

Elektronika.lt portalo forumas

Jūs esate neprisijungęs lankytojas. Norint dalyvauti diskusijose, būtina užsiregistruoti ir prisijungti prie forumo. Prisijungę galėsite kurti naujas temas, atsakyti į kitų užduotus klausimus, balsuoti forumo apklausose.

Administracija pasilieka teisę pašalinti pasisakymus bei dalyvius, kurie nesilaiko forumo taisyklių. Pastebėjus nusižengimus, prašome pranešti.

Dabar yra 2024 10 09, 19:27. Visos datos yra GMT + 2 valandos.
 Forumas » Mikrovaldikliai » uart komandų priėmimas
Jūs negalite rašyti naujų pranešimų į šį forumą
Jūs negalite atsakinėti į pranešimus šiame forume
Jūs negalite redaguoti savo pranešimų šiame forume
Jūs negalite ištrinti savo pranešimų šiame forume
Jūs negalite dalyvauti apklausose šiame forume
 
  
Puslapis 12
Pereiti prie 1, 2  Toliau
Pradėti naują temą  Atsakyti į pranešimą Rodyti ankstesnį pranešimą :: Rodyti kitą pranešimą 
 uart komandų priėmimas
PranešimasParašytas: 2014 03 25, 23:33 Pranešti apie taisyklių pažeidimą Atsakyti su citata
TomasK
Patyręs dalyvis
Patyręs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Sveiki,
Norėčiau, kad užvestumėte ant kelio kaip su mikrovaldikliu pasiimti cielas komandas. Kad būtų aiškiau įmetu gabaliuką kodo kurį naudoju dabar, bet esu nepatenkintas veikimu.
Pasiimu iš uart kažkokį tai bufferį s[], toliau:

switch (s[0]){

case 'l':
if ( (s[1]=='a') && (s[2]=='b') && (s[3]=='a') && (s[4]=='s'))
{
sendFString(LABAS);
}
break;

default:
sendFString(ERROR);
break;

Bėda ta, kad jei nusiunčiu į uart pvz. tik laba tai programa tikrina iki a raidės, tada nueina į break ir nieko neįvyksta. Galima būtų panaudoti else, bet gal apskritai yra geresnis būdas pasiimti komandoms negu, kad aš naudoju?


Paskutinį kartą redagavo TomasK, 2014 03 25, 23:52. Redaguota 2 kartus(ų)
 uart komandų priėmimas
PranešimasParašytas: 2014 03 25, 23:45 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Master_Of_King
Užkietėjęs dalyvis
Užkietėjęs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Apsilankyti vartotojo tinklapyje
Nelabai supratau kodėl tu naudoji switch o tau negeriau taip:
Kodas:
 if ((s[0]=='l') && (s[1]=='a') && (s[2]=='b') && (s[3]=='a') && (s[4]=='s')) {
sendFString(LABAS);
}else{
sendFString(ERROR);}
 uart komandų priėmimas
PranešimasParašytas: 2014 03 25, 23:50 Pranešti apie taisyklių pažeidimą Atsakyti su citata
TomasK
Patyręs dalyvis
Patyręs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
switch todėl, kad gali būti daug komandų, labas kaip pavyzdys tik pateikta, realiai tarkim gali būti adc0, voltage0, temp0 ir pan., su switch pasiimu pirmą raidę ir toliau lyginu sekančios raidelės ar atitinka.
Else galima panaudoti, bet aš galvoju gal apskritai blogą metodą naudoju, gal kas nors užves ant geresnio kelio.
 uart komandų priėmimas
PranešimasParašytas: 2014 03 25, 23:58 Pranešti apie taisyklių pažeidimą Atsakyti su citata
TomasK
Patyręs dalyvis
Patyręs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Kad būtų aiškiau dėl ko naudoju switch (pavyzdys):
switch (s[0]){

case 'l':
if ( (s[1]=='a') && (s[2]=='b') && (s[3]=='a') && (s[4]=='s'))
{
//kazka veikiam
}
break;

case 'a':
if ( (s[1]=='c') && (s[2]=='i') && (s[3]=='u'))
{
//kazka veikiam
}
break;

default:
//error
break;
 uart komandų priėmimas
PranešimasParašytas: 2014 03 25, 23:58 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Master_Of_King
Užkietėjęs dalyvis
Užkietėjęs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Apsilankyti vartotojo tinklapyje
Na nzn gal kiti pasiūlys ir geresni variantą bet aš tai taip daryčiau:
Kodas:
if(tikrini labas){ darai ką nori}
else if(tikrini kita){ darai kita}
else if(tikrini ...){ darai ...}
else if(tikrini ...){ darai ...}
else { error }


Paskutinį kartą redagavo Master_Of_King, 2014 03 26, 00:01. Redaguota 1 kartą
 uart komandų priėmimas
PranešimasParašytas: 2014 03 26, 00:01 Pranešti apie taisyklių pažeidimą Atsakyti su citata
TomasK
Patyręs dalyvis
Patyręs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Tai vat jeigu ta komanda būtų kaip vienetas, o ne raidžių eilutė tai gal ir papraščiau viskas būtų.
 uart komandų priėmimas
PranešimasParašytas: 2014 03 26, 00:16 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Master_Of_King
Užkietėjęs dalyvis
Užkietėjęs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Apsilankyti vartotojo tinklapyje
O tai koks skirtumas ar vienetas ar raidžių masyvas ? ir beto vis tiek tu tam switch'e naudoji if Rolling Eyes tai kaip ir be reikalingai tas switch Rolling Eyes

O tau ant laba neišmeta error nes l atitinka o paskui po to yra break ir išmeta lauk o nenueina į error, jei įdėsi į if funkciją break tada tau pakibs ir pastoviai tikrins ta l kuris nebus teisingas, todėl aš galvoju kad čia switch visiškai netinka Smile
 uart komandų priėmimas
PranešimasParašytas: 2014 03 26, 08:52 Pranešti apie taisyklių pažeidimą Atsakyti su citata
caca
Patyręs dalyvis
Patyręs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Siųsti el. laišką
cia nera jau toks paprastas algoritmas, kaip atrodytu is pirmo zvilgsnio... Pirmas dalykas, tai reikalingas komandos identifikatorius(simboliu runkinys, kad yra komanda). po to kai tas atpazistama, tai priimami komandos simboliai, o komandos simboliu seka lyginama su komandu saraso seka simbolis i simboli... Kai simboliai sutampa didinamas sutapimo rodiklis ir kai jis pasiekia reikiama komanda atpazistama. Geriausia, kai komandos ilgis visoms komandoms yra vienodas. Be to sukuriamas sistemoje buferis i kuri telpa komanda ir is sio buferio simboliai skaitomi ratu kol bus atpazintas komandos headeris... ir t.t....

_________________
Nieko taip lengvai nedaliname, kaip patarimus...
 uart komandų priėmimas
PranešimasParašytas: 2014 03 26, 09:53 Pranešti apie taisyklių pažeidimą Atsakyti su citata
AlgisL
Senbuvis
Senbuvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
pasirasai f-ja kuri sulygina buferyje esancia info su perduodamu parametru ir nesuki kiausiu nei sau, nei mums.
drisiu priminti, kad lyginant dar reikia ivertinti kiek tos info yra buferyje.
 uart komandų priėmimas
PranešimasParašytas: 2014 03 26, 10:29 Pranešti apie taisyklių pažeidimą Atsakyti su citata
TomasK
Patyręs dalyvis
Patyręs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Iseinant is funkcijos as buferi nunulinu tai nesigauna begalinis ciklas.
Šiaip is principo šitas metodas veikia, dar pridedu, kad paskutinį skaičių iš buferio paimtų tai nukreipia automatiškai į adc kanalą reikiamą, tik vienas dalykas kuris nepatinka tai, kad nesuvedus pilnos komandos, o tik pradžią - negaunu klaidos.
 uart komandų priėmimas
PranešimasParašytas: 2014 03 26, 11:07 Pranešti apie taisyklių pažeidimą Atsakyti su citata
caca
Patyręs dalyvis
Patyręs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Siųsti el. laišką
tam kad gautum klaida kai nesuvesta pilna komanda turetum skaiciuoti laika, skirta komandos priemimui. Jei jis virsijamas-klaida ir buferio isvalymas.

_________________
Nieko taip lengvai nedaliname, kaip patarimus...
 uart komandų priėmimas
PranešimasParašytas: 2014 03 26, 12:33 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Master_Of_King
Užkietėjęs dalyvis
Užkietėjęs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Apsilankyti vartotojo tinklapyje
O kuo blogas šitoks kodas ?
Kodas:
if((s[0]=='l') && (s[1]=='a') && (s[2]=='b') && (s[3]=='a') && (s[4]=='s')) {sendFString(LABAS); }
else if((s[0]=='a') && (s[1]=='d') && (s[2]=='c'))) { sendFString(ADC); }
else if((s[0]=='v') && (s[1]=='o') && (s[2]=='l')&& (s[3]=='t')&& (s[4]=='a')&& (s[5]=='g')&& (s[6]=='e')) { sendFString(Voltage); }
else if((s[0]=='t') && (s[1]=='e') && (s[2]=='m')&& (s[3]=='p')) { sendFString(Temp); }
else {sendFString(ERROR);}
 uart komandų priėmimas
PranešimasParašytas: 2014 03 26, 13:12 Pranešti apie taisyklių pažeidimą Atsakyti su citata
TomasK
Patyręs dalyvis
Patyręs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Net nežinau kodėl užsiciklinau ant to switch, gal vistik reiks bandyt be jo susidėliot viską, o if`e kreipsiu į atitinkamas funkcijas, kuriose dar papildomai pasiimsiu paskutinį buferio simbolį adc kanalo nustatymui, o funkcijos gale nulinsiu bufferi.
Dėkui už patarimus.
 uart komandų priėmimas
PranešimasParašytas: 2014 03 26, 13:51 Pranešti apie taisyklių pažeidimą Atsakyti su citata
caca
Patyręs dalyvis
Patyręs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Siųsti el. laišką
tas switch tai nieko blogo Smile Jis tinka. kartais buna daug vaizdesnis ir lengviau skaitomas nei kad kitokie aprasymai.

_________________
Nieko taip lengvai nedaliname, kaip patarimus...
 uart komandų priėmimas
PranešimasParašytas: 2014 03 26, 15:01 Pranešti apie taisyklių pažeidimą Atsakyti su citata
AlgisL
Senbuvis
Senbuvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
kas link pacio programavimo ir i ka kompiliatorius pavers koda, tai algoritmo aiskumo delei ir neprarandant nasumo gali daryti kad ir taip:
Kodas:

volatile int timeOut = 0;
volatile int bufIndex = 0;

ISR (USART_RXC_vect)
{
  char temp = UDR;
  if (bufIndex > sizeof(buf))
  {
//ERROR
    return;
  }
  timeOut = 0;
  buf[bufIndex++] = temp;
}

void clearBuf(void)
{
  cli();
  while (bufIndex) buf[--bufIndex] = 0;
  sei();
}

void testLABAS(void)
{
  if (buf[0] != 'L') return;
  if (buf[1] != 'A') return;
  if (buf[2] != 'B') return;
  if (buf[3] != 'A') return;
  if (buf[4] != 'S') return;
  clearBuf();
// .. tavo veiksmai
}

void testADC(void)
{
  if (buf[0] != 'A') return;
  if (buf[1] != 'D') return;
  if (buf[2] != 'C') return;
  clearBuf();
// .. tavo veiksmai
}

void main(void)
{
  while (1)
  {
    if (timeOut < 1000)
    {
      _delay_ms(1);
      timeOut++;
    }
    else
    {
// ERROR
      clearBuf();
      timeOut = 0;
    }
    testLABAS();
    testADC();
//    testXXX();
//    testYYY();
  }
}
Pradėti naują temą  Atsakyti į pranešimą Pereiti prie 1, 2  Toliau
 
Forumo sistema: phpBB
 „Google“ paieška forume
 Kas naujesnio?
 Naujos temos forume

Global electronic components distributor – Allicdata Electronics

Electronic component supply – „Eurodis Electronics“

LOKMITA – įvairi matavimo, testavimo, analizės ir litavimo produkcija

Full feature custom PCB prototype service

GENERAL FINANCING BANKAS

Mokslo festivalis „Erdvėlaivis Žemė

LTV.LT - lietuviškų tinklalapių vitrina

„Konstanta 42“

Technologijos.lt

Buitinė technika ir elektronika internetu žemos kainos – Zuza.lt

www.esaugumas.lt – apsaugok savo kompiuterį!

PriedaiMobiliems.lt – telefonų priedai ir aksesuarai

Draugiškas internetas

FS25 Tractors
Farming Simulator 25 Mods, FS25 Maps, FS25 Trucks
ETS2 Mods
ETS2 Trucks, ETS2 Bus, Euro Truck Simulator 2 Mods
FS22 Tractors
Farming Simulator 22 Mods, FS22 Maps, FS25 Mods
VAT calculator
VAT number check, What is VAT, How much is VAT
LEGO
Mänguköök, mudelautod, nukuvanker
Thermal monocular
Thermal vision camera,
Night vision ar scope,
Night vision spotting scope
FS25 Mods
FS25 Harvesters, FS25 Tractors Mods, FS25 Maps Mods
Dantų protezavimas
All on 4 implantai,
Endodontija mikroskopu,
Dantų implantacija
FS25 Mods
FS25 Maps, FS25 Cheats, FS25 Install Mods
GTA 6 Weapons
GTA 6 Characters, GTA 6 Map, GTA 6 Vehicles
FS25 Mods
Farming Simulator 25 Mods
Reklama
‡ 1999– © Elektronika.lt | Autoriaus teisės | Privatumo politika | Atsakomybės ribojimas | Turinys | Reklama | Kontaktai LTV.LT - lietuviškų tinklalapių vitrina
Script hook v, Openiv, Menyoo
gta5mod.net
FS25 Mods, FS25 Tractors, FS25 Maps
fs25mods.lt
Optical filters, UV optics, electro optical crystals
www.eksmaoptics.com
Reklamos paslaugos
SEO sprendimai

www.addad.lt
Elektroninių parduotuvių optimizavimas „Google“ paieškos sistemai
www.seospiders.lt
FS22 mods, Farming simulator 22 mods,
FS22 maps

fs22.com
Reklama


Reklama