<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=4&amp;t=23390&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2020-11-10T18:35:49+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=23390&amp;mode</id>
<entry>
<author><name><![CDATA[Raqu]]></name></author>
<updated>2020-11-10T18:35:49+01:00</updated>
<published>2020-11-10T18:35:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23390&amp;p=229768#p229768</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23390&amp;p=229768#p229768"/>
<title type="html"><![CDATA[Re: Wysyłanie zmiennych z AVR do Arduino przez SPI.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23390&amp;p=229768#p229768"><![CDATA[
Zrobiłem komunikację pomiędzy AVR a Arduino i działa, kod może prostacki ale jest. Mam jedynie problem z wysyłaniem danych między kilkoma urządzeniami. Mianowicie komunikacja działa pomiędzy:<br />1. Arduino - AVR<br />2. Arduino - LCD - karta SD<br /><br />Ale gdy do LCD karty SD i Arduino podpinam AVR, wyświetlacz nie wyświetla nic brak wysyłania na terminal czegokolwiek. <br /><br /><br />Kod Arduino.<br /><br />[syntax=c]#include &lt;GD23Z.h&gt;<br />#include &lt;SPI.h&gt;<br />#include &quot;myassets.h&quot;<br /><br />#define pdPin 8 <br /><br /><br />float angleValue1 = -1.0;<br />static void rotate_Center(float a, int CX, int CY);<br />int t = 1;<br />int obroty = 0;<br />int predkosc = 0;<br />int temp = 0;<br />int egt = 0;<br />float boost = 2.267;<br />float boost1 = 0;<br />int colej = 0;<br />int tolej = 0;<br />int paliwo = 0;<br />int mod1 = 0;<br />int mod2 = 0;<br />int mod3 = 0;<br /><br /><br />int i = 0;<br />int x = 0;<br />char odebrane;<br />int tab&#91;25&#93;;<br />int zmienna = 0;<br />int zmienna1 = 0;<br />int zmienna2 = 0;<br /><br /><br />void setup()<br />{<br /><br />  Serial.begin(9600);<br />  pinMode(pdPin, OUTPUT);<br />  pinMode(9, OUTPUT);<br />  <br />  digitalWrite(pdPin, HIGH);<br />  delay(20);<br />  digitalWrite(pdPin, LOW);<br />  delay(20);<br />  digitalWrite(pdPin, HIGH);<br />  delay(20);<br /><br />  GD.begin();<br />  LOAD_ASSETS ();<br /><br />  //  GD.BitmapHandle(0);<br />  //  GD.cmd_loadimage(0, 0);<br />  // GD.load(&quot;lcd3.png&quot;);<br />  //<br />  //  GD.BitmapHandle(1);<br />  //  GD.cmd_loadimage(-1, 0);<br />  //  GD.load(&quot;Pn1.png&quot;);<br />  //<br />  //  GD.BitmapHandle(2);<br />  //  GD.cmd_loadimage(-1, 0);<br />  //  GD.load(&quot;N0.png&quot;);<br />  //<br />  //<br />  //  GD.BitmapHandle(3);<br />  //  GD.cmd_loadimage(-1, 0);<br />  //  GD.load(&quot;N1.png&quot;);<br />  //<br />  //  GD.BitmapHandle(4);<br />  //  GD.cmd_loadimage(-1, 0);<br />  //  GD.load(&quot;N2.png&quot;);<br />  //<br />  //<br />  //  GD.BitmapHandle(5);<br />  //  GD.cmd_loadimage(-1, 0);<br />  //  GD.load(&quot;N3.png&quot;);<br />  //<br />  //<br />  //  GD.BitmapHandle(6);<br />  //  GD.cmd_loadimage(-1, 0);<br />  //  GD.load(&quot;N4.png&quot;);<br />  //<br />  //  GD.BitmapHandle(7);<br />  //  GD.cmd_loadimage(-1, 0);<br />  //  GD.load(&quot;N5.png&quot;);<br />  //<br />  //  GD.BitmapHandle(8);<br />  //  GD.cmd_loadimage(-1, 0);<br />  //  GD.load(&quot;N6.png&quot;);<br />  //<br />  ////    GD.BitmapHandle(9);<br />  ////  GD.cmd_loadimage(-1, 0);<br />  ////  GD.load(&quot;N7.png&quot;);<br /><br />  GD.ClearColorRGB(0xaaaaaa);<br />  GD.End();<br /><br />  SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE0)); <br />  SPI.begin();      // nowa linijka <br /><br />}<br /><br />void loop(){<br /><br /><br />// KOD DO POBIERANIA DANYCH Z AVR<br /><br />  int i;      <br />  int x = 0;     <br /><br />  odbierz(i);<br /><br />  if ( odebrane == '#') {                                       <br />    while (odebrane != 'f') {<br />      delay(2);<br />      odbierz(i);<br />      tab&#91;x&#93; = (odebrane - 48);<br />      x++;<br /><br />      zmienna = tab&#91;0&#93;;<br /><br />      for (int s = 1, d = 100; s &lt; 4; s++ , d = d / 10) {<br /><br />        zmienna1 = (zmienna1 + (tab&#91;s&#93; * d));<br /><br />      }<br />      zmienna1 = (zmienna1 - 100);<br /><br />      for (int o = 4, p = 1000; o &lt; 8; o++ , p = p / 10) {<br /><br />        zmienna2 = (zmienna2 + (tab&#91;o&#93; * p));<br /><br />      }<br />      zmienna2 = (zmienna2 - 1000);<br /><br />      Serial.print(&quot;Zmienna = &quot;);<br />      Serial.println(zmienna);<br /><br />      Serial.print(&quot;Zmienna1 = &quot;);<br />      Serial.println(zmienna1);<br /><br />      Serial.print(&quot;Zmienna2 = &quot;);<br />      Serial.println(zmienna2);<br /><br />      Serial.println();<br />    }<br />  }                                                               <br /><br />// KONIEC KODU DO ODBIERANIA DANYCH<br /><br />  obroty = 0; //((analogRead(A0)) / 1.28);<br />  predkosc = 0; //analogRead(A3);<br />  temp = 0; //((analogRead(A2)) / 8.5);<br />  egt = 0; //  analogRead(A3);<br />  angleValue1 = 0; //(((analogRead(A3)) / 4) - 135);<br />  boost = analogRead(A0);<br />  colej = 0; //((analogRead(A1)) / 8.5);<br />  tolej = 0; //analogRead(A1);<br />  paliwo = 0; //((analogRead(A3)) / 8.5);<br /><br /><br />  delay(30);<br /><br />  mod1 = ( predkosc / 100);<br />  mod2 = (( predkosc % 100) / 10);<br />  mod3 = ( predkosc % 10);<br /><br />  GD.ClearColorRGB(0xaaaaaa);<br />  GD.Clear();<br /><br />  // OBROTY<br /><br />  if (obroty &lt;= 500) {<br />    GD.ColorRGB(0x42ff00);<br />  }<br />  else if (obroty &gt; 500 &amp; obroty &lt; 700) {<br />    GD.ColorRGB(0xffcf07);<br />  }<br />  else if (obroty &gt;= 700) {<br />    GD.ColorRGB(0xfc0000);<br />  }<br /><br />  GD.Begin(RECTS);<br />  GD.Vertex2f(22 * 16, 35 * 16);<br />  GD.Vertex2f(obroty * 16, 120 * 16);<br /><br />  // TEMPERATURA CIECZY<br /><br />  if (temp &lt;= 90) {<br />    GD.ColorRGB(0x42ff00);<br />  }<br />  else if (temp &gt; 90 &amp; temp &lt; 100) {<br />    GD.ColorRGB(0xffcf07);<br />  }<br />  else if (temp &gt;= 100) {<br />    GD.ColorRGB(0xfc0000);<br />  }<br /><br />  GD.Begin(RECTS);<br />  GD.Vertex2f(30 * 16, 204 * 16);<br />  GD.Vertex2f((temp * 16) + (26 * 16), 233 * 16);<br /><br />  GD.ColorRGB(0x000000);<br />  GD.cmd_number(88, 218, 24, OPT_CENTER, temp);<br />  GD.cmd_text(117, 218, 24, OPT_CENTER, &quot;C&quot;);<br /><br />  // EGT<br /><br />  if (egt &lt;= 850) {<br />    GD.ColorRGB(0x42ff00);<br />  }<br />  else if (egt &gt; 850 &amp; egt &lt; 900) {<br />    GD.ColorRGB(0xffcf07);<br />  }<br />  else if (egt &gt;= 900) {<br />    GD.ColorRGB(0xfc0000);<br />  }<br /><br />  GD.Begin(RECTS);<br />  GD.Vertex2f(30 * 16, 303 * 16);<br />  GD.Vertex2f((((egt) / 8.5) * 16) + (26 * 16), 333 * 16);<br /><br />  GD.ColorRGB(0x000000);<br />  GD.cmd_number(88, 318, 24, OPT_CENTER, egt);<br />  GD.cmd_text(125, 318, 24, OPT_CENTER, &quot;C&quot;);<br /><br /><br />  // BOOST<br /><br />  if (boost &lt;= 0) {<br />    GD.ColorRGB(0x42ff00);<br />  }<br />  else if (boost &gt; 0 &amp; boost &lt; 0.5) {<br />    GD.ColorRGB(0xffcf07);<br />  }<br />  else if (boost &gt;= 0.5) {<br />    GD.ColorRGB(0xfc0000);<br />  }<br /><br />  GD.Begin(RECTS);<br />  GD.Vertex2f(30 * 16, 402 * 16);<br />  GD.Vertex2f((((boost / 8.5)) * 16) + (26 * 16), 432 * 16);<br /><br />  GD.ColorRGB(0x000000);<br />  GD.cmd_number(88, 416, 24, OPT_CENTER, ((boost)));<br />  GD.cmd_text(117, 416, 24, OPT_CENTER, &quot;KPa&quot;);<br /><br /><br />  // C. Oleju<br /><br />  if ((colej / 28) &lt;= 1) {<br />    GD.ColorRGB(0xfc0000);<br />  }<br />  else if ((colej / 28) &gt; 1 &amp; (colej / 28) &lt; 3) {<br />    GD.ColorRGB(0xffcf07);<br />  }<br />  else if ((colej / 28) &gt;= 3) {<br />    GD.ColorRGB(0x42ff00);<br />  }<br /><br />  GD.Begin(RECTS);<br />  GD.Vertex2f(645 * 16, 203 * 16);<br />  GD.Vertex2f((((colej)) * 16) + (645 * 16), 232 * 16);<br /><br />  GD.ColorRGB(0x000000);<br />  GD.cmd_number(704, 217, 24, OPT_CENTER, (colej / 29));<br />  GD.cmd_text(730, 217, 24, OPT_CENTER, &quot;Bar&quot;);<br /><br /><br />  // T. Oleju<br /><br />  if ((tolej / 8.5) &lt;= 80) {<br />    GD.ColorRGB(0x42ff00);<br />  }<br />  else if ((tolej / 8.5) &gt; 80 &amp; (tolej / 8.5) &lt; 120) {<br />    GD.ColorRGB(0xffcf07);<br />  }<br />  else if ((tolej / 8.5) &gt;= 120) {<br />    GD.ColorRGB(0xfc0000);<br />  }<br /><br />  GD.Begin(RECTS);<br />  GD.Vertex2f(645 * 16, 303 * 16);<br />  GD.Vertex2f((((tolej / 8.5)) * 16) + (645 * 16), 332 * 16);<br /><br />  GD.ColorRGB(0x000000);<br />  GD.cmd_number(704, 317, 24, OPT_CENTER, (tolej / 7));<br />  GD.cmd_text(735, 317, 24, OPT_CENTER, &quot;C&quot;);<br /><br /><br />  // PALIWO<br /><br />  if (paliwo &lt;= 10) {<br />    GD.ColorRGB(0xfc0000);<br />  }<br />  else if (paliwo &gt; 10 &amp; paliwo &lt; 50) {<br />    GD.ColorRGB(0xffcf07);<br />  }<br />  else if (paliwo &gt;= 50) {<br />    GD.ColorRGB(0x42ff00);<br />  }<br /><br />  GD.Begin(RECTS);<br />  GD.Vertex2f(645 * 16, 403 * 16);<br />  GD.Vertex2f(((paliwo) * 16) + (645 * 16), 432 * 16);<br /><br />  GD.ColorRGB(0x000000);<br />  GD.cmd_number(704, 417, 24, OPT_CENTER, (paliwo));<br />  GD.cmd_text(735, 417, 24, OPT_CENTER, &quot;%&quot;);<br /><br /><br />  // Prędkość<br /><br /><br />  // Wczytanie grafiki PNG<br /><br /><br />  GD.ColorRGB(0xffffff);<br />  GD.Vertex2ii(0, 0, 10);<br />  GD.cmd_number(755, 105, 30, OPT_CENTER, obroty * 10.3);<br /><br />  switch (mod1) {<br />    case 0:<br />      GD.Vertex2ii (307, 295, 0); // 0<br />      break;<br /><br />    case 1:<br />      GD.Vertex2ii (307, 295, 1); // 1<br />      break;<br /><br />    case 2:<br />      GD.Vertex2ii (307, 295, 2); // 2<br />      break;<br /><br />    case 3:<br />      GD.Vertex2ii (307, 295, 3); // 1<br />      break;<br /><br />    case 4:<br />      GD.Vertex2ii (307, 295, 4); // 2<br />      break;<br />  }<br /><br />  switch (mod2) {<br /><br />    case 0:<br />      GD.Vertex2ii (367, 295, 0); // pic2<br />      break;<br /><br />    case 1:<br />      GD.Vertex2ii (367, 295, 1); // pic2<br />      break;<br /><br />    case 2:<br />      GD.Vertex2ii (367, 295, 2); // pic2<br />      break;<br /><br />    case 3:<br />      GD.Vertex2ii (367, 295, 3); // pic2<br />      break;<br /><br />    case 4:<br />      GD.Vertex2ii (367, 295, 4); // pic2<br />      break;<br /><br />    case 5:<br />      GD.Vertex2ii (367, 295, 5); // pic2<br />      break;<br /><br />    case 6:<br />      GD.Vertex2ii (367, 295, 6); // pic2<br />      break;<br /><br />    case 7:<br />      GD.Vertex2ii (367, 295, 7); // pic2<br />      break;<br /><br />    case 8:<br />      GD.Vertex2ii (367, 295, 8); // pic2<br />      break;<br /><br />    case 9:<br />      GD.Vertex2ii (367, 295, 9); // pic2<br />      break;<br /><br /><br />  }<br /><br />  switch (mod3) {<br /><br />    case 0:<br />      GD.Vertex2ii (427, 295, 0); // pic3<br />      break;<br /><br />    case 1:<br />      GD.Vertex2ii (427, 295, 1); // pic3<br />      break;<br /><br />    case 2:<br />      GD.Vertex2ii (427, 295, 2); // pic3<br />      break;<br /><br />    case 3:<br />      GD.Vertex2ii (427, 295, 3); // pic3<br />      break;<br /><br />    case 4:<br />      GD.Vertex2ii (427, 295, 4); // pic3<br />      break;<br /><br />    case 5:<br />      GD.Vertex2ii (427, 295, 5); // pic3<br />      break;<br /><br />    case 6:<br />      GD.Vertex2ii (427, 295, 6); // pic3<br />      break;<br /><br />    case 7:<br />      GD.Vertex2ii (427, 295, 7); // pic3<br />      break;<br /><br />    case 8:<br />      GD.Vertex2ii (427, 295, 8); // pic3<br />      break;<br /><br />    case 9:<br />      GD.Vertex2ii (427, 295, 9); // pic3<br />      break;<br /><br />  }<br /><br />  GD.Begin(BITMAPS);<br />  rotate_Center(DEGREES(angleValue1), 156, 156);<br />  GD.cmd_setmatrix();<br />  GD.Vertex2ii(243, 172, 11); // wskazówka<br /><br />  GD.swap();<br /><br />      zmienna = 0;     // nowa linijka<br />      zmienna1 = 0;     // nowa linijka<br />      zmienna2 = 0;     // nowa linijka<br /><br />}<br /><br />static void rotate_Center(float a, int CX, int CY)<br />{<br />  GD.cmd_translate(F16(CX), F16(CY));<br />  GD.cmd_rotate(a);<br />  GD.cmd_translate(F16(-CX), F16(-CY));<br />}<br /><br />// Funckcja odbierania znakow<br /><br />void odbierz(unsigned int n) {<br />  digitalWrite(9, LOW);<br />  odebrane = SPI.transfer(n);<br />  digitalWrite(9, HIGH);<br />}[/syntax]<br /><br />Kod AVR<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;stdio.h&gt;<br />#define UART_BAUD 9600<br />#define __UBRR ((F_CPU+UART_BAUD*8UL) / (16UL*UART_BAUD)-1 ) // obliczeni<br /><br />int c = 0;<br />int d = 0;<br />int e = 0;<br /><br />    while(1) {<br /><br /><br />    PomiarC();<br />    PomiarD();<br />    PomiarE();<br /><br />    Wyslij_Ciag(&quot;pomiare = &quot;);<br />    Wyslij_CiagInt((e/105)); // Tutaj bieg od 0 do 9<br />    Wyslij_Ciag(&quot;\n\r &quot;);<br /><br />    Wyslij_Ciag(&quot;pomiarc = &quot;);<br />    Wyslij_CiagInt((c/4));// Tutaj predkosc od 0 do 300<br />    Wyslij_Ciag(&quot;\n\r &quot;);<br /><br />    Wyslij_Ciag(&quot;pomiard = &quot;);<br />    Wyslij_CiagInt((d*7)); // tutaj obroty od 0 do 7000<br />    Wyslij_Ciag(&quot;\n\r &quot;);<br /><br />    Wyslij_Ciag_SPI(&quot;#&quot;);<br />    Wyslij_CiagInt_SPI((e/105));<br />    Wyslij_CiagInt_SPI((c/4)+100);<br />    Wyslij_CiagInt_SPI((d*7)+1000);<br />    Wyslij_Ciag_SPI(&quot;f&quot;);<br /><br /><br />    }<br />}<br /><br /><br />void spi_init_slave (void)<br />{<br />    // set SCK, SS and MOSI as input<br /> //   DDRB &amp;= ~(1 &lt;&lt; PB5); // SCK WEJSCIE<br />  //  DDRB &amp;= ~(1 &lt;&lt; PB3); // MOSI WEJSCIE<br />    DDRB &amp;= ~(1 &lt;&lt; PB2); // SS WEJSCIE<br />    DDRB |= (1 &lt;&lt; PB4); // MISO WYJSCIE<br />    PORTB |= (1 &lt;&lt; PB4); // pullup na MOSI<br /><br />    SPCR |= (1 &lt;&lt; SPE); // wlacz SPI i ustaw jako Slave<br /><br />}<br /><br />void ADC_Inicjalizacja() {<br /><br />ADCSRA = ( 1 &lt;&lt; ADEN ) | ( 1 &lt;&lt; ADPS0 ) | ( 1 &lt;&lt; ADPS1 ) | ( 1 &lt;&lt; ADPS2 ); // ADEN - W³¹czenie ADC,  ADPS - Preskaler 128<br />//ADMUX = ( 1 &lt;&lt; REFS1) | ( 1 &lt;&lt; REFS0 ); // Napiêcie odniesienia 2,56V<br /><br />DDRC &amp;= ~(1 &lt;&lt; PC0);<br />DDRC &amp;= ~(1 &lt;&lt; PC1);<br />DDRC &amp;= ~(1 &lt;&lt; PC2);<br /><br />DDRB |= (1 &lt;&lt; PB0);<br />}<br /><br />uint16_t PomiarC() {<br /><br />c = pomiar ( PC1 ) ;<br /><br />    if (c &lt; 0) {<br /><br />    c = 0;<br /><br />    }<br /><br />    return c;<br /><br />}<br /><br />void Wyslij_Znak_SPI(char cData)<br />{<br />SPDR = cData;<br />while(!(SPSR &amp; (1&lt;&lt;SPIF))); // Czeka na zakoñczenie transmisji<br />}<br /><br />void Wyslij_Ciag_SPI ( char * s )<br />{<br />while( *s ) Wyslij_Znak_SPI ( *s++ );<br />}<br /><br />void Wyslij_CiagInt_SPI ( int val )<br />{<br />char buf&#91;7&#93;;<br />itoa (val, buf, 10 );<br />Wyslij_Ciag_SPI ( buf );<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18688">Raqu</a> — 10 lis 2020, o 18:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2020-10-15T11:36:19+01:00</updated>
<published>2020-10-15T11:36:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23390&amp;p=229429#p229429</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23390&amp;p=229429#p229429"/>
<title type="html"><![CDATA[Re: Wysyłanie zmiennych z AVR do Arduino przez SPI.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23390&amp;p=229429#p229429"><![CDATA[
<div class="quotetitle">Raqu napisał(a):</div><div class="quotecontent"><br />i nie pamiętam co gdzie jest.<br /></div><br />Jak się wejdzie na czyjś kanał na YT to w szukajka wyszukuje po nazwach filmy z tego kanału zdaje się - tak można sobie pomagać jak coś<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 15 paź 2020, o 11:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Raqu]]></name></author>
<updated>2020-10-15T11:25:33+01:00</updated>
<published>2020-10-15T11:25:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23390&amp;p=229428#p229428</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23390&amp;p=229428#p229428"/>
<title type="html"><![CDATA[Re: Wysyłanie zmiennych z AVR do Arduino przez SPI.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23390&amp;p=229428#p229428"><![CDATA[
[quote=&quot;mirekk36&quot;]Najpierw to warto zacząć od Bluebooka .... <br /><br /><!-- m --><a class="postlink" href="https://atnel.pl/mikrokontrolery-avr-jezyk-c.html" >https://atnel.pl/mikrokontrolery-avr-jezyk-c.html</a><!-- m --><br /><br />a później kilka poradników wideo<br /><br />Tak bluebook właśnie włożyli do Paczkomatu <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> po pracy będę go odbierał. Co do filmów oglądałem ale dawno temu i nie pamiętam co gdzie jest.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18688">Raqu</a> — 15 paź 2020, o 11:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2020-10-15T10:32:02+01:00</updated>
<published>2020-10-15T10:32:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23390&amp;p=229426#p229426</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23390&amp;p=229426#p229426"/>
<title type="html"><![CDATA[Re: Wysyłanie zmiennych z AVR do Arduino przez SPI.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23390&amp;p=229426#p229426"><![CDATA[
Najpierw to warto zacząć od Bluebooka .... <br /><br /><!-- m --><a class="postlink" href="https://atnel.pl/mikrokontrolery-avr-jezyk-c.html" >https://atnel.pl/mikrokontrolery-avr-jezyk-c.html</a><!-- m --><br /><br />a później kilka poradników wideo<br /><br /><div style="width: 583px; height: 471px; margin: 0 auto; padding-left: 26px; padding-top: 48px; background: url('https://www.atnel.pl/download/atnel_tv.png') no-repeat;"> <strong>iframe</strong> </div><br /><br /><div style="width: 583px; height: 471px; margin: 0 auto; padding-left: 26px; padding-top: 48px; background: url('https://www.atnel.pl/download/atnel_tv.png') no-repeat;"> <strong>iframe</strong> </div><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 15 paź 2020, o 10:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[JarekB]]></name></author>
<updated>2020-10-15T07:26:40+01:00</updated>
<published>2020-10-15T07:26:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23390&amp;p=229423#p229423</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23390&amp;p=229423#p229423"/>
<title type="html"><![CDATA[Re: Wysyłanie zmiennych z AVR do Arduino przez SPI.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23390&amp;p=229423#p229423"><![CDATA[
Dane które przychodzą powinieneś pakować do bufora. Gdy przyjdzie znak końca ramki wtedy można podjąć decyzję do jakiej zmiennej przepisać zawartość bufora. (funkcja odwrotna do itoa czyli atoi). Cały proces jest opisany przez Mirka w tematach dotyczących buforów cyklicznych. Poszperaj. Co prawda dotyczyło to UARTA ale co za różnica czy to UART czy SPI. Obsługa bufora w przerwaniu będzie taka sama.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18188">JarekB</a> — 15 paź 2020, o 07:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Raqu]]></name></author>
<updated>2020-10-14T21:33:03+01:00</updated>
<published>2020-10-14T21:33:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23390&amp;p=229421#p229421</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23390&amp;p=229421#p229421"/>
<title type="html"><![CDATA[Re: Wysyłanie zmiennych z AVR do Arduino przez SPI.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23390&amp;p=229421#p229421"><![CDATA[
Próbowałem odbierać dane na przerwaniu ale nie chciało to chyba działać do końca pewnie robiłem coś źle. A na jakiej zasadzie przypisywać dane do różnych zmiennych ? Masz jakiś pomysł ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18688">Raqu</a> — 14 paź 2020, o 21:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Draxter32]]></name></author>
<updated>2020-10-14T19:43:47+01:00</updated>
<published>2020-10-14T19:43:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23390&amp;p=229416#p229416</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23390&amp;p=229416#p229416"/>
<title type="html"><![CDATA[Re: Wysyłanie zmiennych z AVR do Arduino przez SPI.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23390&amp;p=229416#p229416"><![CDATA[
A czy nie lepiej zrobić to na przerwaniu od SPI? W momencie kiedy nadejdą dane z Mastera do Slave wywołana zostanie procedura obsługi przerwania. W funkcji tej zostaną przypisane dane do zmiennej i gotowe.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8185">Draxter32</a> — 14 paź 2020, o 19:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Raqu]]></name></author>
<updated>2020-10-14T17:04:03+01:00</updated>
<published>2020-10-14T17:04:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23390&amp;p=229414#p229414</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23390&amp;p=229414#p229414"/>
<title type="html"><![CDATA[Wysyłanie zmiennych z AVR do Arduino przez SPI.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23390&amp;p=229414#p229414"><![CDATA[
Witam,<br /><br />Od kilku dni próbuję zrobić komunikację na SPI między AVR i Arduino. Wysyłanie pojedynczych znaków czy cyfr nie robi większego problemu. Natomiast nie mogę poradzić sobie z wysyłaniem kilku zmiennych które są obliczane w AVR i następnie mają być wysłane przez SPI do Arduino i tam na ich podstawie ma się wykonywać dalszy kod. Zrobiłem trochę ułomny kod którym wysyłam &quot;#&quot; i na jego podstawie odczytuję że jest to początek zmiennej 1, następnie wysyłam cyfry na monitor i wyświetla je poprawnie. Nie wiem tylko jak wpisać te liczby do zmiennej.<br /><br />Tutaj kod Arduino:<br /><br />[syntax=c]#include &lt;SPI.h&gt;<br /><br />int i = 0;<br />char odebrane;<br /><br />void setup() {<br />  Serial.begin(9600);<br />  pinMode(10, OUTPUT);<br />  SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE0));<br />  SPI.begin();<br />}<br /><br />void odbierz(unsigned int n) {<br />  digitalWrite(10, LOW);<br />  odebrane = SPI.transfer(n);<br />}<br /><br />void loop() {<br />  int i;<br />  odbierz(i);<br /><br />  if ( odebrane == '#') {<br /><br />    while ( odebrane != '&amp;') {<br /><br />      if (  odebrane == '#') {<br />        odbierz(i);<br />      }<br />      Serial.print(odebrane);<br />      odbierz(i);<br />    }<br />    Serial.println();<br />  }<br />}[/syntax]<br /><br />Tutaj kod na AVR:<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />int c=0;<br />int d=0;<br /><br />void spi_init_master (void)<br />{<br />    // set SCK, SS and MOSI as input<br />    DDRB &amp;= ~(1 &lt;&lt; PB5); // SCK WEJSCIE<br />    DDRB &amp;= ~(1 &lt;&lt; PB3); // MOSI WEJSCIE<br />    DDRB &amp;= ~(1 &lt;&lt; PB2); // SS WEJSCIE<br />    DDRB |= (1 &lt;&lt; PB4); // MOSI WEJSCIE<br />    PORTB |= (1 &lt;&lt; PB4); // pullup na MOSI<br /><br />    SPCR |= (1 &lt;&lt; SPE); // wlacz SPI<br /><br />}<br /><br />void Wyslij_Znak_SPI(char cData)<br />{<br />SPDR = cData;<br />while(!(SPSR &amp; (1&lt;&lt;SPIF))); // Czeka na zakończenie transmisji<br />}<br /><br />void Wyslij_Ciag_SPI ( char * s )<br />{<br />while( *s ) Wyslij_Znak_SPI ( *s++ );<br />}<br /><br />void Wyslij_CiagInt_SPI ( int val )<br />{<br />char buf&#91;7&#93;;<br />itoa (val, buf, 10 );<br />Wyslij_Ciag_SPI ( buf );<br />}<br /><br /><br />int main(void)<br />{<br />    spi_init_master(); // inicjalizacja spi<br /><br />    while(1) {<br /><br />    c = 5323;<br />    d = 1234;<br /><br />    Wyslij_Ciag_SPI(&quot;#&quot;);<br />    Wyslij_CiagInt_SPI(2455);<br />    Wyslij_Ciag_SPI(&quot;\r \n&quot;);<br /><br />    Wyslij_Ciag_SPI(&quot;&amp;&quot;);<br />    Wyslij_CiagInt_SPI(d);<br />    Wyslij_Ciag_SPI(&quot;\r \n&quot;);<br /><br />    }<br />}[/syntax]<br /><br />Byłbym wdzięczny za pomoc bo już kończą mi się pomysły a nie mogę znaleźć nic co by mi pomogło.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18688">Raqu</a> — 14 paź 2020, o 17:04</p><hr />
]]></content>
</entry>
</feed>