ATNEL tech-forum
https://forum.atnel.pl/

Uart predkosc transmisji
https://forum.atnel.pl/topic23782.html
Strona 1 z 1

Autor:  domel1 [ 18 maja 2021, o 19:44 ]
Tytuł:  Uart predkosc transmisji

Hej mam pytanie może mi ktos pomoże podlaczylem dwa arduina nano atmega328 ze soba Rx-TX i chce przesyłac
dane po uarcie normalnie to ma byc wlasne sterowanie zdalne do jakiegos modelu np latajacego docelowo zeby odbiornik sterował serwami

Mam pytanie dlaczego adruino uart jest taki wolny ? Normalnie robie jakis tam przyklad z książki ze TX wciskam dwa klawisze i RX jesli wcisne jeden to zapali sie jedna dioda i tak dalej zamiast diody mialo by serwo .Ale czemu to takie wolne jest ? w programie jest standardowo

serial.port(9600) itd ale to przelanie danych zapalenie diody RX w odbiorniku trwa ze 3 sek , to ten model latajacy dawno mi spadnie i sie rozbije :) jak z takim tempem bedę dane przesyłał .Myslalem ze to z prędkoscia swiatła jest ..:)

Zaznaczam ze jestem od lat poczatkujacy C to chyba nigdy sie nie naucze a wiele razy próbowalem najprostsze cwiczenia z atmega8 ale stanalem na jakims tam etapie teraz próbuje arduino
Kod mogę zapodać

Autor:  auers [ 18 maja 2021, o 20:27 ]
Tytuł:  Re: Uart predkosc transmisji

To nie Uart jest wolny, tylko to co wgrałeś.

Autor:  Marhef [ 18 maja 2021, o 20:33 ]
Tytuł:  Re: Uart predkosc transmisji

Podaj kod.
Problem występuje zaraz po uruchomieniu arduino? Czy po jakimś czasie?
Zauważ, że w arduino masz przejściówkę USB<>UART do wgrywania wsadu. Zaraz po podaniu zasilania działa bootloader, który może powodować "opóźnienia"

Autor:  domel1 [ 19 maja 2021, o 07:50 ]
Tytuł:  Re: Uart predkosc transmisji

//programiki na RX I TX
// nadajnik
#define BUTTON 10
#define BUTTON1 11
void setup ()
{
Serial.begin(9600);
}
void loop()
{
if ( digitalRead(BUTTON) == HIGH )
{
Serial.print("1 ");

}
if ( digitalRead(BUTTON1) == HIGH )
{
Serial.print("2 "); }
}
//////////////////////////////////////////////////////////////////////
//odbiornik
#define led 8
#define led1 9
//#include <Servo.h>

//Servo myservo;
String odebraneDane = ""; //Pusty ciąg odebranych danych

void setup() {

//myservo.attach(9);
Serial.begin(9600); //Uruchomienie komunikacji
pinMode(led, OUTPUT); //Konfiguracja wyjść
pinMode(led1, OUTPUT);

digitalWrite(led, LOW); //Wyłączamy diody
digitalWrite(led1, LOW);
}

void loop() {
if(Serial.available() > 0) { //Czy Arduino odebrało dane
//Jeśli tak, to odczytujemy je do znaku końca linii i zapisz w zmiennej odebraneDane
odebraneDane = Serial.readStringUntil('\n');

if (odebraneDane == "1") { //Jeśli odebrano słowo "zielona"
digitalWrite(led, HIGH); //To włączamy diodę zieloną
delay(100);
digitalWrite(led, LOW);
delay(100);
digitalWrite(led, HIGH); //To włączamy diodę zieloną
delay(100);
digitalWrite(led, LOW);
delay(100);
digitalWrite(led, HIGH); //To włączamy diodę zieloną
delay(100);
digitalWrite(led, LOW);
delay(100);
digitalWrite(led, HIGH); //To włączamy diodę zieloną
delay(100);
digitalWrite(led, LOW);
}

if (odebraneDane == "2") { //Jeśli odebrano słowo "czerwona"
digitalWrite(led1, HIGH); //To włączamy diodę czerwoną
delay(100);
digitalWrite(led1, LOW);
delay(100);
digitalWrite(led1, HIGH); //To włączamy diodę czerwoną
delay(100);
digitalWrite(led1, LOW);
delay(100);
digitalWrite(led1, HIGH); //To włączamy diodę czerwoną
delay(100);
digitalWrite(led1, LOW);
delay(100);
digitalWrite(led1, HIGH); //To włączamy diodę czerwoną
delay(100);
digitalWrite(led1, LOW);
//myservo.write(180);
//delay(500);
//myservo.write(90);
//delay(500);
//myservo.write(0);
//delay(500);
}
}
}
Klasyczne ksiazkowe programy
Znaczy jak nie uart jest wolny? przy tej transmisji 9600 ktora jest niby najbardziej optymalna ze bledow nie ma ? no chce zeby to sie szybko działo normalnie transmisja miedzy prockiem a proskiem . a tu jak w TX wciskam guzik to sie w RX dioda zapala i zanim sie diody zaświeca to 3 sekundy mija .Przecież np w komputerach myszka jak sie klika to reguje od razu. I drugie pytanie tam jest zakrementowane // instrukcje od serwa , jak je chcialem wprowadzic zeby serwo cos robilo to juz pierwsza czesc programu z diodami nie działała

Autor:  micky [ 19 maja 2021, o 07:55 ]
Tytuł:  Re: Uart predkosc transmisji

Zastanawiałeś się jaka jest przepustowość przy 9600? Przy standardowej transmisji 8 bitow danych, brak bitu parzystości, 1 bit stopu masz 960 znaków na sekundę. Więc jak widzisz 9600 mimo, że wolne to jednak nie takie straszne wolne - zależy co i ile chcesz przesyłać.

Autor:  raczyk [ 19 maja 2021, o 09:16 ]
Tytuł:  Re: Uart predkosc transmisji

ATmega 328P i 16Mhz w Arduino więć?

Obrazek

Możesz też 19.2k, 38.4k nawet 78.6k. Kwarc 16Mhz Ciebie ogranicza oraz wyłącz ten program do Adruino i zacznij pisać kod w Eclipsie. Zacznij wykorzystywać cały potencjał a nie 0,01% :)

Autor:  domel1 [ 19 maja 2021, o 09:41 ]
Tytuł:  Re: Uart predkosc transmisji

Ale gdzie tam ja poczatkujacy jestem nie poradze sobie z tym za chiny ja tylko umiem przyklad z ksiazki albe neta spisać.Zaawansowane instrukcje nie kumam.Nawet nie umiem licznikow skonfigurowac zeby sobie generator zrobić fajny albo wlasnie do serwa kod ( inny niz to fade z example ) Pisanie w eclipse ? ale to w jest C a nie w arduino ? nie wiem o czym mowa wogóle :)

Czyli żeby szybciej sie to robiło to tylko programik RX trzeba poprawic ? ale jak ?

Autor:  Mario17 [ 19 maja 2021, o 09:41 ]
Tytuł:  Re: Uart predkosc transmisji

Prędkość UARTa nie jest tu problemem. Problemem jest użycie delay(). Do migania diodami wykorzystaj funkcje millis() lub timery programowe żeby nie blokować obługi UARTa (funkcja Serial.available()) na kilka sekund za każdym razem po odebrniu jednego znaku.

https://forbot.pl/blog/kurs-arduino-ii-wielozadaniowosc-opoznienia-z-millis-id18418

Autor:  Marhef [ 19 maja 2021, o 20:08 ]
Tytuł:  Re: Uart predkosc transmisji

Mario17 napisał(a):
żeby nie blokować obługi UARTa (funkcja Serial.available()) na kilka sekund za każdym razem po odebrniu jednego znaku
Przecież tu blokuje "tylko" na ok. sekundę.
Masz na arduino diody Tx, Rx? Jeśli tak, sprawdź, czy dioda Tx nadajnika "mrugnie" od razu po wciśnięciu przycisku.
I jeszcze jedno, jak masz przyciski podłączone? Z tego, co widzę, nie uruchamiasz przycisków. W odbiorniku masz ładnie pinMode(led,OUTPUT; w nadajniku brakuje odpowiednika dla przycisków.

Jak znajdę drugie arduino, spróbuję uruchomić Twój przykład, zobaczę co się stanie

Autor:  Mario17 [ 19 maja 2021, o 21:51 ]
Tytuł:  Re: Uart predkosc transmisji

Marhef napisał(a):
Przecież tu blokuje "tylko" na ok. sekundę.

No tak, nie zauważyłem że delay(500) są zakomentowane w drugim przypaku, co nie zmienia że obłsuga UART i miganie diodami w ten sposób nie jest najlepsze.

Po stronie nadajnika TX wysyłane jest Serial.print("1<spacja>"); Serial.print("2<spacja>");, o ile dobrze jest kod pokazany (przy okazji kod powinien być wstawiony w [syntax c]). Powinno być Serial.print("1\n"); Serial.print("2\n"); bo po stronie RX odbiornik czeka na znak '\n'.

Strona 1 z 1 Strefa czasowa: UTC + 1
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/