Elektronika.lt
 2025 m. balandžio 30 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 2025 04 30, 13:34. Visos datos yra GMT + 2 valandos.
 Forumas » Mikrovaldikliai » AVR USART
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ą 
 AVR USART
PranešimasParašytas: 2010 04 14, 22:09 Pranešti apie taisyklių pažeidimą Atsakyti su citata
HIdef
Svečias
Sveiki. Mano problema yra string'u "atpazinimas". Tai yra noriu kad mikrovaldiklis galetu atpazinti priimtas eilutes, o ne tik pavienius simbolius. Tam naudoju cikla for , keliu i masyva, bet nebeiseina. Kiek ziurejau tai net vieno simbolio i masyva neikelia. Mikrovaldiklis Atmega16, 4MHZ. Butu malonu sulaukt pagalbos Smile



int USARTReadChar()
{
while(!(UCSRA & (1<<RXC)))
{
}
return UDR;
}


int main(void)
{
DDRD=255;
while(1){

unsigned int data=USARTReadChar();
unsigned int a[3];
unsigned int i;

for(i=0;i<3;i++){
a[i]=data;
}

if(a[0]==1 && a[1]==2 && a[2]==3){

PORTD=255;

}
}
 AVR USART
PranešimasParašytas: 2010 04 15, 05:04 Pranešti apie taisyklių pažeidimą Atsakyti su citata
MarcaZ
Užkietėjęs dalyvis
Užkietėjęs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Kodas:
unsigned char USARTReadChar(void)
{
  // laukiam kol baitas priimtas
  while((UCSRA&(1<<RXC)) == 0);
  //grazinam ka gavom
  return UDR;
}

int main(void)
{

DDRD=255;
while(1)
{


unsigned char a[3];
unsigned int i;

  for(i=0;i<3;i++)
  {
   a[i]=USARTReadChar;
  }

if(a[0]==1 && a[1]==2 && a[2]==3)
{

PORTD=255;

}
}



Bet geriau naudok:

ISR(USART_RXC_vect)
{
// Cia kodas kuri nori vykdyti kai per UART gaunami duomenis(RX).
}


pvz:

Nepamirsk uart nustatymuose nustatyti:
UCSRB=(1<<RXEN)|(1<<RXCIE);

pvz:

Kodas:
ISR(USART_RXC_vect)
{

unsigned char data;
data=USARTReadChar();

if(data==(1))
PORTC |= (1 << 0); //LED ijungta
}



int main(void)
{
 
 USART_Init();
 while(1)
 {
 }
return 0;
}
 AVR USART
PranešimasParašytas: 2010 04 15, 16:58 Pranešti apie taisyklių pažeidimą Atsakyti su citata
R2D2
Užkietėjęs dalyvis
Užkietėjęs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
pamiršai
Kodas:
sei();


ir netikslinga ISR`e tikrint flagą, kai ISRas ir taip to flago yra pakviečiamas. jei nori suklijuoti masyvą, tai daryk už ISR, išsaugodamas UDR priimtą reikšmę kokiam nors kintamajame ir main`e jį apdorodamas.

jei naudoji winavr, kad ISR veiktų turi primesti:
Kodas:
#include <interrupt.h>


HIdef

tavo kodas įkelia data į visus a[]. o data priima tik kartą.
 AVR USART
PranešimasParašytas: 2010 04 15, 19:06 Pranešti apie taisyklių pažeidimą Atsakyti su citata
HIdef
Svečias
R2D2 rašo:
pamiršai
Kodas:
sei();


ir netikslinga ISR`e tikrint flagą, kai ISRas ir taip to flago yra pakviečiamas. jei nori suklijuoti masyvą, tai daryk už ISR, išsaugodamas UDR priimtą reikšmę kokiam nors kintamajame ir main`e jį apdorodamas.

jei naudoji winavr, kad ISR veiktų turi primesti:
Kodas:
#include <interrupt.h>


HIdef

tavo kodas įkelia data į visus a[]. o data priima tik kartą.


O kaip padaryt kad data priimtu ne tik karta? jo terminale kai rasai simboli, tai jo nerodo, tiesiog issiuncia ir viskas, eilutes neparasysi ir paspaudes enter nenusiusi.. kaip tai galima butu padaryt?
 AVR USART
PranešimasParašytas: 2010 04 15, 20:39 Pranešti apie taisyklių pažeidimą Atsakyti su citata
R2D2
Užkietėjęs dalyvis
Užkietėjęs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
jei hyper terminale, tai pridėk nustatymuose echo.

kad nuolatos nuskaitytų, tai kaip markaz rašė.
 AVR USART
PranešimasParašytas: 2010 04 16, 19:38 Pranešti apie taisyklių pažeidimą Atsakyti su citata
HIdef
Svečias
dekui uz pagalba Smile gaila tik kad niekas neveikia, atvirksciai irasius ta Markaz programa pakimba mikrovaldiklis, uzgesta prie TX ir RX prijungti diodai ir viskas Smile tada ponyprog jo nemato, nei skaito nei raso nk, ir kol rr pc nepadarai tol kitos programos irasyti neimanoma. Turit minciu?
 AVR USART
PranešimasParašytas: 2010 04 16, 20:22 Pranešti apie taisyklių pažeidimą Atsakyti su citata
R2D2
Užkietėjęs dalyvis
Užkietėjęs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
hyper terminalas (HT) užblokuoja com portą ir ponyprog negauna jo valdymo. HT disconnect ar pan. reik nuspaust ir veiks.

o atmega pakimba nes kažką ne taip parašei.
 AVR USART
PranešimasParašytas: 2010 04 16, 20:33 Pranešti apie taisyklių pažeidimą Atsakyti su citata
HIdef
Svečias
del to viskas tvarkoj. Irasau markaz programa, nugesta diodai, tada einu i HT, bandau siust duomenis (siuo atveju rasyt 1 , 2 , 3) , bet parases nieko nesidaro, neisijungia diodai. Ir va kai po sito isjungiu HT, einu i ponyprog perasinet softo, tada jau ponyprog buna "atsijunges", dingsta rysys... Nzn negi tai del tos programos? Naudoju AVR Studio4 , sukompiliuoja be eroru ir be warning'u, viskas lyg ir tvarkoj... Tiesa buvo klaidele sioj vietoj:

for(i=0;i<3;i++)
{
a[i]=USARTReadChar;
}

, as ja istaisiau i

for(i=0;i<3;i++)
{
a[i]=USARTReadChar();
}
 AVR USART
PranešimasParašytas: 2010 04 16, 22:36 Pranešti apie taisyklių pažeidimą Atsakyti su citata
R2D2
Užkietėjęs dalyvis
Užkietėjęs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
šiaip 1!='1'

tu HT spausdini '1', o tikrini ar ten 1. google: ascii table

dėl com, o ką ponyprog rašo, kokią klaidą? kažkas dar naudoja com portą matyt
 AVR USART
PranešimasParašytas: 2010 04 16, 23:09 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ą
paprastai tokie dalykai daromi rasant i buferi simboliu eilute. Vieno pertraukimo nuo Usart RX metu irasomas vienas simbolis i buferi ir sekama, kad buferis nepersikrautu... Pagrindiniame cikle daroma buferio analize ir desifruojama info buferyje...

_________________
Nieko taip lengvai nedaliname, kaip patarimus...
 AVR USART
PranešimasParašytas: 2010 04 18, 13:28 Pranešti apie taisyklių pažeidimą Atsakyti su citata
HIdef
Svečias
caca rašo:
paprastai tokie dalykai daromi rasant i buferi simboliu eilute. Vieno pertraukimo nuo Usart RX metu irasomas vienas simbolis i buferi ir sekama, kad buferis nepersikrautu... Pagrindiniame cikle daroma buferio analize ir desifruojama info buferyje...


Jeigu aš šitą žinočiau, tai turbūt neuždavinėčiau tokių klausimų? ...
 AVR USART
PranešimasParašytas: 2010 04 18, 15:04 Pranešti apie taisyklių pažeidimą Atsakyti su citata
centronic
Užkietėjęs dalyvis
Užkietėjęs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Kodas:

//**************************************************
//******** IAR, AVR, 4MHz, USART br19200 ***********
//**************************************************
#define ENABLE_BIT_DEFINITIONS
#include <ioavr.h>
#include <intrinsics.h>
#include <string.h>
//
#define sbi(PORT,BIT) (PORT |= (1<<BIT))
#define cbi(PORT,BIT) (PORT &= ~(1<<BIT))
#define bitas(PIN,BIT) (PIN &(1 << BIT))
//
char usart_data[8];
//*************************************************
void usart_send(char *tp){
  unsigned char i;
  i = 0;
  while(tp[i] != 0){
    while(1){
      if(bitas(UCSRA,UDRE)){
        UDR = tp[i];
   i++;
        break;
      }
    }
  }
}
//*************************************************
unsigned char usart_read(void){
  unsigned char i;
  TCNT0 = 0;
  sbi(TIFR,TOV0);
  i = 0;
  while(1){
    if(bitas(TIFR,TOV0)){ //jei praejus 16ms negauna nauju duomenu
      return 0; //reiskia duomenys atsiusti
    }
    if(bitas(UCSRA,RXC)){
      usart_data[i] = UDR;
      TCNT0 = 0; 
      i++;
    }
    if(i == 8) return 1; //klaida persipilde usart_data mas.
  } 
}
//*************************************************
void usart_init(void){
  UBRRH = 0;
  UBRRL = 12; //br19200
  UCSRB = 0x18;
  UCSRC = 0x86; 
}
//*************************************************
void main( void ){
  unsigned char i;
  DDRC = 0xFF;
  TCCR0 = 0x04;
  usart_init();
  usart_send("USART Test\n");
  while(1){
    if(bitas(UCSRA,RXC)){
      i = usart_read();
      if(i == 0){ //jei viskas gerai tikrina kas atsiusta
        i = strncmp(usart_data, "123",3);
        if(i == 0){
          PORTC = 255;
        }
        i = strncmp(usart_data, "456",3);
        if(i == 0){
          PORTC = 0;
        }
      }else{ //jei blogai
        PORTC = 0xAA; //rodo klaida;
      }
      for(i=0; i<8; i++){
        usart_data[i] = '0'; //isvalo usar_data masyva
      }
    }
  }
}


avr usart video Razz
 AVR USART
PranešimasParašytas: 2010 04 19, 18:51 Pranešti apie taisyklių pažeidimą Atsakyti su citata
HIdef
Svečias
dekoju uz pagalba : ) Dar viena klausima turiu,tarkim gaunu duomenis kurie susideda ne is vienos eilutes, o is keliu, tarkim is dvieju eiluciu (jos gaunamas be pertrauku). Kaip mikrovaldiklis interpretuoja tai? Kaip tas dvi gautas eilutes apdorot? Tai yra pirma eilute susidet i viena masyva, o antra - i antra? Bandziau visokiu variantu, bet nebeiseina. Va turbut akivaizdziausias pvz:

if(i == 0){ //jei viskas gerai tikrina kas atsiusta

//iesko tam tikru simboliu, kurie yra ne pirmojoj gautoj eilutei, o butent antroj
char *ptr = strstr(usart_data, "dingo");
if(ptr != NULL){
PORTD = 255;
USart_Send_String(ptr);
}

Taigi pvz nusiuntus sias dvi eilutes,

mano batai buvo du
vienas dingo nerandu

zodzio "dingo" jau neranda.

P.S. masyvo dydi padariau atitinkama
P.S. dar karta primenu sios eilutes siunciamos i mC nesustojant

Isvados: Reikia pirmaja gauta zinute issidet i viena masyva, antra eilute - i antra. Kitokiu variantu nesugalvojau, bet jei kas zinot tai siulykit. Aciu uz pagalba : )
 AVR USART
PranešimasParašytas: 2010 04 19, 19:39 Pranešti apie taisyklių pažeidimą Atsakyti su citata
HIdef
Svečias
Is esmes tai tos dvi eilutes turetu atrodyt taip?

mano batai buvo du \n vienas dingo nerandu

Pagal mano bandymus tai taip nera, nes tada tikrai rastu zodi esanti uz \n , ta prasme kitoj eilutej.
 AVR USART
PranešimasParašytas: 2010 04 19, 20:52 Pranešti apie taisyklių pažeidimą Atsakyti su citata
centronic
Užkietėjęs dalyvis
Užkietėjęs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
pasiunti tokią eilutę (jei imanoma) 'mano batai buvo du\nvienas dingo nerandu\n'
Kodas:

char usart_data_1[16];
char usart_data_2[16];
//*************************************************
void usart_read(void){
  unsigned char i;
  i = 0;
  while(usart_data_1[i] != '\n'){ //"mano batai buvo du\n"
    if(bitas(UCSRA,RXC)){
      usart_data_1[i] = UDR;
      i++;
    }
  }
  i = 0;
  while(usart_data_2[i] != '\n'){//"vienas dingo nerandu\n"
    if(bitas(UCSRA,RXC)){
      usart_data_2[i] = UDR;
      i++;
    }
  } 
}
[/url]
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

Sveiki ir ekologiški maisto produktai

Mokslo festivalis „Erdvėlaivis Žemė

LTV.LT - lietuviškų tinklalapių vitrina

„Konstanta 42“

„Mokslo sriuba“

www.matuok.lt - Interneto spartos matavimo sistema

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
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
FS25 Mods
Farming Simulator 25 Mods,
FS25 Maps
ATS Trailers
American Truck Simulator Mods, ATS Trucks, ATS Maps
Football Training Kit
Football Training Equipment, Football Skills, Football Training
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
„MokslasPlius“ – mokslui skirtų svetainių portalas
www.mokslasplius.lt
Optical filters, UV optics, electro optical crystals
www.eksmaoptics.com
LTV.LT – lietuviškų tinklalapių vitrina
www.ltv.lt/technologijos/
Elektroninių parduotuvių optimizavimas „Google“ paieškos sistemai
www.seospiders.lt
FS22 mods, Farming simulator 22 mods,
FS22 maps

fs22.com
Reklama


Reklama