Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 14 lis 2024, o 16:12


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 
Autor Wiadomość
PostNapisane: 18 maja 2021, o 19:44 
Offline
Nowy

Dołączył(a): 05 mar 2014
Posty: 16
Pomógł: 0

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ć



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 maja 2021, o 20:27 
Offline
Użytkownik

Dołączył(a): 11 sty 2015
Posty: 166
Pomógł: 24

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 maja 2021, o 20:33 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sty 2016
Posty: 1164
Lokalizacja: Kraków
Pomógł: 93

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"



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 maja 2021, o 07:50 
Offline
Nowy

Dołączył(a): 05 mar 2014
Posty: 16
Pomógł: 0

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 maja 2021, o 07:55 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 2583
Pomógł: 128

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ć.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 maja 2021, o 09:16 
Offline
Użytkownik

Dołączył(a): 18 lut 2015
Posty: 164
Lokalizacja: Koszalin
Pomógł: 16

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% :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 maja 2021, o 09:41 
Offline
Nowy

Dołączył(a): 05 mar 2014
Posty: 16
Pomógł: 0

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 ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 maja 2021, o 09:41 
Offline
Użytkownik

Dołączył(a): 26 mar 2014
Posty: 34
Pomógł: 11

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 maja 2021, o 20:08 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 26 sty 2016
Posty: 1164
Lokalizacja: Kraków
Pomógł: 93

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



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 maja 2021, o 21:51 
Offline
Użytkownik

Dołączył(a): 26 mar 2014
Posty: 34
Pomógł: 11

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'.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO