Mimo iż problem dość popularny zapytam bo nie znalazłem dogodnego mi rozwiązania.
Mam do wysłania 2 liczby. Jedna z zakresu 0-10 druga 0-5000. Ta druga nie mieści się w jednym bajcie więc rozkładam ją na dwa bajty po stronie C#. Dodam że encoding na serialPorcie mam ustawiony na UTF8. A wygląda to tak:
UPLOAD_PARAMS mówi mikrokontrolerowi "teraz dostaniesz 2 liczby w 3 bajtach, złów 2 ostatnie bajty w jedną liczbę i zapisz do epromu, a odbiór wygląda tak (pierwszy bajt to wlasnie ten UPLOAD_PARAMS):
a odsyłanie po stronie procka:
Pierwsza jedno bajtowa liczba zawsze jest wysyłana w dwie strony dobrze, druga jeśli wyślę liczbę mniejszą niż 127 też jest dobrze, jeśli nieco większą nie wraca wogóle 3 bajt lub są przekłamania. Dla przykłądu wysyłam 3 i 12. Na quick watchu w Visual studio widzę 3 bajty do wysłania, 3, 12 i 0 i dokładnie to samo do mnie wraca. Jeśli wyślę 3 i 4566 3 przychodzi jak jest, a 4566 rozłożone na 2 bajty tylko jeden z nich jest prawidłowy a drugiego nie ma wcale lub też się zdarzało że pojawiała się zawsze wartość 112.
Na pokładzie ATmegi leży kwarc 8 MHz a fusebity mam ustawione tak:
Gdzie może leżeć probem?
Mam do wysłania 2 liczby. Jedna z zakresu 0-10 druga 0-5000. Ta druga nie mieści się w jednym bajcie więc rozkładam ją na dwa bajty po stronie C#. Dodam że encoding na serialPorcie mam ustawiony na UTF8. A wygląda to tak:
string amplituda = (Convert.ToChar(Int16.Parse(seAmpl.Value.ToString()))).ToString();
int x = Convert.ToInt16(seFreq.Value);
int low = (x & 0x00FF);
int high = ((x & 0xFF00) >> 8);
string freqLow = (Convert.ToChar(low).ToString());
string freqHigh = (Convert.ToChar(high).ToString());
string toSend = stale.UPLOAD_PARAMS + amplituda + freqLow + freqHigh + "\r\n";
serialPort.Write(toSend);
UPLOAD_PARAMS mówi mikrokontrolerowi "teraz dostaniesz 2 liczby w 3 bajtach, złów 2 ostatnie bajty w jedną liczbę i zapisz do epromu, a odbiór wygląda tak (pierwszy bajt to wlasnie ten UPLOAD_PARAMS):
Diode(1);
if (counter<4)
{
params[counter]=returner;
counter++;
}
else
{
counter=0;
for (int i=1; i<4; i++) toEeprom((270+i), params[i]);
amplituda = params[1];
frequency = (params[3] << 8) | params[2];
Diode(0);
mode = 0;
}
a odsyłanie po stronie procka:
Diode(1);
send("n");
sendbyte(fromEeprom(271));
sendbyte(fromEeprom(272));
sendbyte(fromEeprom(273));
send("\r\n");
mode = 0;
Diode(0);
Pierwsza jedno bajtowa liczba zawsze jest wysyłana w dwie strony dobrze, druga jeśli wyślę liczbę mniejszą niż 127 też jest dobrze, jeśli nieco większą nie wraca wogóle 3 bajt lub są przekłamania. Dla przykłądu wysyłam 3 i 12. Na quick watchu w Visual studio widzę 3 bajty do wysłania, 3, 12 i 0 i dokładnie to samo do mnie wraca. Jeśli wyślę 3 i 4566 3 przychodzi jak jest, a 4566 rozłożone na 2 bajty tylko jeden z nich jest prawidłowy a drugiego nie ma wcale lub też się zdarzało że pojawiała się zawsze wartość 112.
Na pokładzie ATmegi leży kwarc 8 MHz a fusebity mam ustawione tak:
Gdzie może leżeć probem?