Przerobienie kodu arduino na bascom


Witajcie.
Jako, że nie mam arduino, chciałem zrobić coś na avr, konkretnie na tiny13, bo mam go pod ręką i program(w zasadzie fragment) jest prosty.

Sprawa dotyczy pewnego urządzenia, po wysłaniu do niego ciągu jedynek i zer uruchamia się pewna funkcja. Nigdy wcześniej nie wysyłałem nic w bascomie, jedynie proste rzeczy z diodami i timerami. Chciałem więc prosić o pomoc w przełożeniu na chłopski rozum kodu z arduino do bascoma.

Oto fragment kodu:

#define sync_pin 2 //power button repurposed for sync button (pin 5 on the module)
#define data_pin 3 //data line (pin 6 on the module)
#define clock_pin 4 //clock line (pin 7 on module)
 
int led_cmd[10] =  {0,0,1,0,0,0,0,1,0,0}; //aktywuje animcacje .
int anim_cmd[10] = {0,0,1,0,0,0,0,1,0,1}; //kolejna animacja
int sync_cmd[10] = {0,0,0,0,0,0,0,1,0,0}; //aktywacja synchronizacja z drugim urządzeniem

Tutaj zadeklarowane są słowa 10 bitowe.

void sendData(int cmd_do[]) {
  pinMode(data_pin, OUTPUT);
  digitalWrite(data_pin, LOW);    //rozpoczęcie transmisji
  int prev = 1;
  for(int i = 0; i < 10; i++){
 
    while (prev == digitalRead(clock_pin)){} //detekcja zmiany stanu zegara clk
    prev = digitalRead(clock_pin);
 
    digitalWrite(data_pin, cmd_do[i]);
 
    while (prev == digitalRead(clock_pin)){} //detekcja narastajacego zbocza
    prev = digitalRead(clock_pin);
  }
  digitalWrite(data_pin, HIGH);
  pinMode(data_pin, INPUT);
}

Tutaj jest przykładowa transmisja. Głównie chodzi o to jak sprawdzać w bascomie czy zbocze jest 0 czy 1 i jak wysłać coś na pin, tzn. można w postaci binarnej np. zmienna=&B1010101010 i to na porcie zrobi swoje czy trzeba np. po kolei ustawiać stany na pinie?

Kwestia poziomu zbocza przy jakim można nadawać, to już załatwię sam, tylko nie wiem jak ugryźć to wysyłanie.
Dzięki

PS. Ewentualnie czy można to zrobić w sposób:
1. detekcja poziomu
2. jeśli jest 1 skok do podprogramu(gosub)
3. w podprogramie seria tzn.
portb.0=1
portb.0=1
portb.0=0
... itd




Portret użytkownika mirley

RE: Wysyłanie

Rozumiem że clk masz podawany z zewnątrz.... wiec musisz go podać na wejscie przerwania zewnętrznego... przerwanie ustawisz na detekcję zbocza narastającego lub opadającego w zależności od potrzeb. W obsłudze przerwania musisz dać licznik i poszczególne bity ustawiać na pinie, każdy bit w nowym przerwaniu (rozumiem że clk jest zegarem transmisji i każdy następny bit jest na kolejnym zboczu)...czyli p tak:

Przerwanie:
 portb.0 = data.n
 incr n

Oczywiście trzeba dac odpowiednie warunki na zerowanie n i ograniczenie długości. W zmiennej data przechowywana jest cała wartośc do wysłania

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika paavo91

CLK jest generowany z tego

CLK jest generowany z tego modułu. Tam wychodzą sygnały CLK i DATA, podobnie jak I2C.

A jeśli bym użył tiny2313 to dało by się wysyłać te dane przez pin TX?

Portret użytkownika mirley

Re: CLK

Z jakiego modułu? CLK ma wychodzić z procesora czy ma być odbierany przez procesor?

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika paavo91

Ma być odbierany. Tak to

Ma być odbierany. Tak to rozumiem z opisu./

Portret użytkownika mirley

Re: transmisja

W takim razie raczej się ni da nic przez TX wysłać.... znaczy możesz sterowac pinem na którym normalnie jest TX ale bedzie to taki sam pin jak każdy inny. Musisz zrobić tak jak napisałem w pierwszym poście, niezależnie od procka

-

UWAGA! Możliwy jest zakup zaprogramowanych uC i zestawów elementów itp. do niektórych projektów. O dostępność proszę pytać via email. Konkretne oferty pojawiają się w cenniku.

Portret użytkownika paavo91

CLK ma odbierać procek, co

CLK ma odbierać procek, co dziwne sprawdzałem ten CLK na oscyloskopie i wygląda bardziej jak impulsy bicia serca ludzkiego niż prostokąt..