Skocz do zawartości

Wysyłanie danych pomiędzy Arduino, AVR i wyświetlaczem.


RaQu

Pomocna odpowiedź

Witam,

Mam pewne pytanie, otóż potrzebuję zrobić komunikację pomiędzy mikrokontrolerami. Mam zrobiony sterownik na Atmega128 przetwarza on dużą ilość danych i steruje podzespołami, kod napisany w czystym C. Następnie przetworzone dane z niektórych zmiennych potrzebuję wysłać do arduino na atmega328p. Arduino ma je odebrać przetworzyć i wysyłać do wyświetlacza razem z grafiką przez SPI ( wyświetlacz z kontrolerem FT810 ). W związku z tym mam kilka pytań.

1. Czy do wysyłania danych z atmegi128 do arduino wystarczy tak samo napisany program jak do terminala putty ?

2. Czy istnieje funkcja w arduino służąca do odbierania danych na przerwaniach ?

3. Przesyłane dane będą na odległości ok 2-3m. Czy w takim przypadku muszę korzystać z układów typu FT232 ?

Edytowano przez RaQu
Link do komentarza
Share on other sites

Wystarczy połączenie przez porty szeregowe. Co do odległości 2-3m to nie powinno być problemów (ale to sprawdź) by te porty sobie z taką odległością poradziły. Poczytaj o obsłudze portu szeregowego w Arduino - chociażby w kursie Arduino. W klasie Serial znajdziesz metodę serialEvent() - zobacz też w przykładach Arduino.

Link do komentarza
Share on other sites

(edytowany)

Jednak będę potrzebował połączyć to na SPI i komunikację między AVR a Arduino zrobić przez CAN. Nie mogę poradzić sobie z różnicami w kodzie na arduino i AVR żeby to razem chciało działać.

Atemga128 ( Master ) ma tylko wysyłać dane do Arduino ( Slave ) następnie Arduino ma wysyłać dane do Wyświetlacza

Atmega128 > Arduino > Wyświetlacz

Sporo przeszukałem i znalazłem kod który trochę przerobiłem. Z AVR wysyłam do arduino zmienną z inkrementacją i wyświetlam na monitorze. 

KOD ARUDINO

// Kod dla arduino

#include <SPI.h>

int i = 0;

void setup() {
  Serial.begin(9600);
  pinMode(10, OUTPUT);
  digitalWrite(10, HIGH);
  SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE0));
  SPI.begin();
}

void odbierz(unsigned int n) {

  digitalWrite(10, LOW); // ustawienie procesora jako slave
  unsigned int odebrane = SPI.transfer(n);
  Serial.print(" Odebrane ");
  Serial.println(odebrane);

}

void loop() {
  int i;

  odbierz(i);
  
}

 

KOD AVR

#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>

void spi_init_slave (void)
{
    // set SCK, SS and MOSI as input
    DDRB &= ~(1 << PB5); // SCK WEJSCIE
    DDRB &= ~(1 << PB3); // MOSI WEJSCIE
    DDRB &= ~(1 << PB2); // SS WEJSCIE
    DDRB |= (1 << PB4); // MOSI WEJSCIE
    PORTB |= (1 << PB4); // pullup na MOSI

    SPCR |= (1 << SPE); // wlacz SPI

}

void Nadaj_SPI(char cData)
{

	SPDR = cData; // Rozpoczęcie transmisji
	while(!(SPSR & (1<<SPIF))); // Czeka na zakończenie transmisji

}

int main(void)
{
    spi_init_slave(); // inicjalizacja spi

    char odpowiedz = 0;

    while(1) {

    	Nadaj_SPI(odpowiedz); // wyslij odpowiedz
        odpowiedz++; //zwieksz

    }
}

 

Jak przerobić kod tak żebym wysyłał konkretne zmienne i przypisywało mi je do tych samych zmiennych w arduino np.

zmienna1 = i++;

zmienna2 = i--;

zmienna3 = 50;

Edytowano przez RaQu
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • 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.