Skocz do zawartości

Prośba o tutorial - komunikacja GUI <-> uC


paavo91

Pomocna odpowiedź

Witam.

Nie wiedziałem gdzie ten temat umieścić, mam nadzieje, że w razie czego ktoś przeniesie.

Pewno wiele użytkowników używa komunikacji po rs232 pomiędzy aplikacją na PC a mikrokontrolerem. Czy ktoś z użytkowników mógłby napisać krótki tutorial jak formować ramki, jak je przesyłać, jak interpretować po odpowiedniej stronie?

Myślę, że takie coś przydałoby się każdemu.\

Dzięki.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Widzę, że nikt w temat nie wniknął ale dołożę jeszcze kawałek kodu. Odnośnie samego usarta nic ponadto co wcześniej ale przy okazji tego tematu może się przyda początkującym do czegoś.

main.c

#include "_usart.h"
mainduino(void){            // ;D

usart.init(115200);                //BAUD 115200
usart.send_string(usart.txt);

while(1){
	// wysyla to co odebral z terminalu.
	// Odbiera poprawnie tylko zakres uint8 (0-255) zakonczone EOL
	if(usart_data_ready) usart.send_uint8(usart.rec_uint8());
}
}

USART.c :

/*                                          USART.c                                                     */

#include "USART.h" 

char buf_txt[_buf_size];
volatile uint8_t c_data = 0;
volatile uint8_t int_count = 0;
volatile uint8_t usart_data_ready = 0;

void usart_init(uint32_t Baud){
#define UBRRL_VALUE (((F_CPU) + 4UL * (Baud)) / (8UL * (Baud))) - 1
//gdyby jednak nie działało: pokombinować ^
#define UBRRH_VALUE (UBRRL_VALUE >> 8)
UCSRA |= (1 << U2X);
UBRRH = UBRRH_VALUE;               
UBRRL = UBRRL_VALUE;
UCSRC |= _BV(URSEL) | _BV(UCSZ1) | _BV(UCSZ0);
UCSRB |= _BV(TXEN) | _BV(RXEN) | _BV(RXCIE);
sei();
}
uint8_t *usart_rec_uint8(void){
usart_data_ready = 0;
return &c_data;
}
void usart_sendS(char *string){

for(; *string; string++){
while (!(UCSRA & _BV(UDRE)));
UDR = *string;
}
}
void usart_send_uint8(uint8_t *c){
utoa(*c, buf_txt, 10);       
usart_sendS(buf_txt);
usart_sendS(" \r\n");
}
ISR(USART_RXC_vect){
int_count++;
c_data = UDR;          
if(int_count  < _buf_size){
	buf_txt[int_count - 1] = c_data;
	if(c_data == '\n'){
		buf_txt[int_count - 1] = 0;
		c_data = atoi(buf_txt);	// stdlib.h - konwertuje string do uint (string w tym wypadku to buf_txt) ~= 20us
		usart_data_ready = 1;
		int_count = 0;
	}
}else int_count = 0;
};

USART.h

/*                                         USART.h                                                 */
#ifndef _USART_H_
#define _USART_H_

#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdlib.h>
#define _NBV(pin)        ~(1<<(pin))

#define _buf_size 8

volatile uint8_t usart_data_ready;

void usart_init(uint32_t);
uint8_t *usart_rec_uint8(void);
void usart_sendS(char *);
void usart_send_uint8(uint8_t *);






#warning "on sie cieszy, ze mogl byc uzyteczny"
#define mainduino char t[29]={83,90,67,90,69,83,76,73,87,69,71,79,32,78,79,87,69,71,79,32,82,79,75,85,33,10,0};typedef struct{char *txt;void (*init)(uint32_t);void (*send_string)(char *);uint8_t *(*rec_uint8)(void);void (*send_uint8)(uint8_t *);}u_s_a_r_t;u_s_a_r_t usart={t,&usart_init,&usart_sendS,&usart_rec_uint8,&usart_send_uint8};int main
#endif

dziękuję za uwagę ;D hh

EDIT:

Edit dla schizotyków: odtyldowano.

Explano: żart rzecz jasna ;D

Z serca wszystkiego najlepszego dla wszystkich i dla każdego. Najlepiej niech każdy sam sobie odpowie czy zasłużył na tyldę. 😉

Najlepszego w nowym roku!

EDIT: optymalizacja aplikacji, minimalizacja kompromitacji

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.