Arduino nepřenáší data po sběrnici

k

Re:Arduino nepřenáší data po sběrnici
« Odpověď #30 kdy: 11. 01. 2016, 16:04:58 »
LPC4370, čip v maloobchodě za 350 Kč.

LPC4370 má pouhých 80 MSamples a můžeš tak reálně zkoumat analogové signály pouze do 8 MHz. To dneska nestačí ani na Arduino, nemá smysl se tím takhle zabývat.
Pro domácí bastlení je vhodné tohle http://www.rigolna.com/products/digital-oscilloscopes/ds1000e/ cena je na úrovni smartphone.


Mirek

Re:Arduino nepřenáší data po sběrnici
« Odpověď #31 kdy: 11. 01. 2016, 16:47:13 »
Na každé straně linky je jiné zařízení. Nevím s jakým krystalem (tím myslím freq.). Některé kombinace při vyšších rychlostech jsou už na mezi a můžou působit problémy.

Jako že má špatně nastavenou děličku?

Ne. Ale že kombinace nastavení děličky pro HW UART a daného XTAL na straně jedné a XTAL + SW řešení UART na straně druhé může mít problémy se vzájemným časováním při asynchronní komunikaci.

U některých kombinací krystalů prostě nevychází konstanty pro děličku celočíselně, ale je tam poměrně velký zbytek. A to u nižších freq (říká Nano, vypadá to na vzdálený senzor, možná kvůli spotřebě běží na nějaké nízké freq, co já vím) může působit problém. Pokud je na obou stranách to samé, je jedno že 9600 Bd není ve skutečnosti 9600 ale třeba 9423 Bd. Ale když se obě strany navzájem nesejdou, je to problém.

Pověstné tímhle byly u vyšších rychlostí (malá čísla v děličce) třeba 8051 - tam byly dobře známé "nebaudové" krystaly, se kterými nebylo možné komunikaci s PC nebo jiným zařízením spolehlivě rozchodit.

Ale je to teď takový divný, píšeme si tu sami mezi sebou a autor  původního dotazu nic. Necháme mu chvíli čas a uvidíme jestli něco zabralo.

dustin

Re:Arduino nepřenáší data po sběrnici
« Odpověď #32 kdy: 11. 01. 2016, 16:49:11 »
Než DS1052E za 9k http://www.silcon.cz/index.php?route=product/product&product_id=1 bych opravdu volil tu DS1054Z za 12.5k http://www.silcon.cz/index.php?route=product/product&path=20_27&product_id=172 , protože tu lze pouhým zadáním sériového kódu upgradovat na daleko vyšší 100MHz model mj. s analýzou všech možných sériových protokolů (např. právě té sériové linky).

Mrkni na http://hifi.slovanet.sk/bb/viewtopic.php?p=224816#224816 dál

Honza

Re:Arduino nepřenáší data po sběrnici
« Odpověď #33 kdy: 11. 01. 2016, 22:14:45 »
Wow abych pravdu řek začínám se ztrácet. Nejsem žádný velký technik je to v podstatě jen hobby. Tákže...

Knihovna by měla fungovat, jedná se o oficiální knihovnu pro arduino takže zde bych problém nehledal.

Zde ještě uvedu kody v obou arduinech jak v nanu tak v meze.

NANO
Kód: [Vybrat]
#include <SoftwareSerial.h>
#include <LCD5110_Basic.h>
#include <Nokia5110.h>
#include <dht.h>
#include <math.h>


#define SSerialRX        10  //Serial Receive pin
#define SSerialTX        11  //Serial Transmit pin
#define SSerialTxControl 12   // RS modul pin 12

// vytvorime seriovy port na pinu 10 a 11 se jménem RS485Serial
SoftwareSerial RS485Serial(SSerialRX, SSerialTX); // RX, TX

LCDnokia5110 lcd(5,6,7,2,13);
//(SCLK, DN, DC, RES, SCE)
LCD5110 myGLCD(13,2,7,5,6);

dht DHT;
#define DHT11_PIN 0

dht DHT2;
#define DHT11_PIN2 1


const unsigned char icon [] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x0E, 0x0A, 0x0E, 0x00, 0xFC, 0xFA, 0x06, 0x06, 0x06, 0x06, 0x06, 0x02, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xBF, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0,
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x0E, 0x0A, 0x0E, 0x00, 0x00, 0xE0, 0xF8, 0x3E, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xF8, 0x3F, 0x0F, 0x00, 0x01, 0xE1, 0xA0, 0xE0, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};

extern uint8_t SmallFont[];
extern uint8_t MediumNumbers[];
extern uint8_t BigNumbers[];


int TempUpPin = A1;
int TempDwnPin = A2;
int LightPin = A3;
int TempUp = 1000;
int TempDwn = 1000;
int Light = 1000;
int SetTemp = 1;
int LastTemp;
int SetInterval = 5000; //Doba po kterou je aktivní mod nastavování teploty
int LightPower = 8;
long last = 0;
long timeout = 0;
long LightOff = 0;
long cekam = 0;

bool debug = true;
bool sett = true;

#define ThermistorPIN1 6   // Podlahoví termostat pin A6
double temp1;

#define ThermistorPIN2 7   // Podlahoví termostat pin A7
double temp2;

double Thermistor(int RawADC, long Calibrate) {
  long Resistance; 
  double Temp; 
  Resistance=Calibrate *((1024.0/RawADC) - 1); 
  Temp = log(Resistance);
  Temp = 1 / (0.001129148 + (0.000234125 * Temp) + (0.0000000876741 * Temp * Temp * Temp));   
  Temp = Temp - 273.15;  // Convert Kelvin to Celsius                                       
  return Temp;  // Return the Temperature
}



void setup()
{
 myGLCD.InitLCD();
 lcd.ShowImage(icon, true);
 pinMode(LightPower, OUTPUT);
 //Serial.begin(9600);
 RS485Serial.begin(14400);
 digitalWrite(LightPower, LOW);
 if(debug){
   Serial.println();
   Serial.println("                 DEBUG MODE ENABLED");
   Serial.println();
 }
 
}
void loop()
{
  if(millis() > cekam){
    cekam = millis() + 100;
    TempUp = analogRead(TempUpPin);
    TempDwn = analogRead(TempDwnPin);
    Light = analogRead(LightPin);
   
    if(debug){
        if((TempUp == 0 || TempDwn == 0) || Light == 0){
        //Serial.print("\t \t \t \t \t");
        //Serial.print("TempUp: ");
        //Serial.print(TempUp);
        //Serial.print("\t");
        //Serial.print("TempDwn: ");
        //Serial.print(TempDwn);
        //Serial.print("\t");
        //Serial.print("Light: ");
        //Serial.println(Light);
        }
    }
   
    if(Light == 0){
      digitalWrite(LightPower, HIGH);
      LightOff = millis()+3000; 
    }
   
 
    if(TempUp == 0){
      digitalWrite(LightPower, HIGH);
      timeout = millis()+SetInterval;
      LightOff = timeout;
       if(SetTemp < 45){
        SetTemp = SetTemp + 1;
      }
    }
   
   
   
    if(TempDwn == 0){
      digitalWrite(LightPower, HIGH);
      timeout = millis()+SetInterval;
      LightOff = timeout;
      if(SetTemp > 1){
        SetTemp = SetTemp - 1;
      }
    }
   
    if((TempUp == 0 || TempDwn == 0) || Light == 0){
      Serial.print("id:1-settemp:");
      Serial.println(SetTemp);
    }
   
    if(LightOff < millis()){   
      digitalWrite(LightPower, LOW);   
    } 
  }

  if((TempDwn != 0 && TempUp != 0) && timeout+250 < millis()){
    if(millis() > last){
      int chk = DHT.read11(DHT11_PIN);
      int chk2 = DHT2.read11(DHT11_PIN2);
      last = millis() + 1000;
      myGLCD.setFont(MediumNumbers);
      myGLCD.printNumI(DHT.temperature, 21, 0);
      myGLCD.printNumI(DHT.humidity, 21, 32);
      if(debug){
        myGLCD.setFont(SmallFont);
        myGLCD.printNumI(last, RIGHT, 24);
        myGLCD.printNumI(SetTemp, LEFT, 24);
        Serial.print("Vlhkost: ");
        Serial.print(DHT.humidity, 0);
        Serial.print("\t");
        Serial.print("Teplota: ");
        Serial.println(DHT.temperature, 0);
      }
     if(debug){
       //Serial.print("SettTemp: ");
       //Serial.println(SetTemp);
       
       digitalWrite(SSerialTxControl, 1);  // Povolí odesílání na modulu RS485   
       // id termostatu
       RS485Serial.print("id:1");
       // teplota z interního čidla
       RS485Serial.print("-its1:");
       RS485Serial.print(DHT.temperature, 0);
       // vlhkost z interního čidla
       RS485Serial.print("-ihs1:");
       RS485Serial.print(DHT.humidity, 0);
     
       //teplota z externiho čidl
       RS485Serial.print("-its2:");
       RS485Serial.print(DHT2.temperature, 0);
       // vlhkost z externiho čidla
       RS485Serial.print("-ihs2:");
       RS485Serial.print(DHT2.humidity, 0);
       
       temp1=Thermistor(analogRead(ThermistorPIN1), 9750);           
       RS485Serial.print("-ets1:");
       RS485Serial.print(temp1,0);
       
       temp2=Thermistor(analogRead(ThermistorPIN2), 9750);           
       RS485Serial.print("-ets2:");
       RS485Serial.print(temp2,0);
       
        if(LastTemp != SetTemp){
         //odesílání informace o nově nastavené teplotě
         LastTemp = SetTemp;
         RS485Serial.print("-stmp:");
         RS485Serial.print(LastTemp);   
       }
       
       RS485Serial.write(0x0A); // odešle znak kového řádku     
       digitalWrite(SSerialTxControl, 0);  // Zakáže odesílání na modulu RS485
     }
    }
  }else{
    if(timeout < millis()){
      myGLCD.clrScr();
      lcd.ShowImage(icon, true);
    }else{     
      myGLCD.clrScr();
      myGLCD.setFont(SmallFont);
      myGLCD.print("Nastavte", CENTER, 1);
      myGLCD.print("teplotu", CENTER, 8);
      myGLCD.setFont(BigNumbers);
      myGLCD.printNumI(SetTemp, CENTER, 24);
      delay(20);
    }
  }
   
}

MEGA
Kód: [Vybrat]
#include <SoftwareSerial.h>

#define SSerialRX        10 //Serial Receive pin
#define SSerialTX        11  //Serial Transmit pin
#define SSerialTxControl 3   // RS modul pin 3

#define R1 22
#define R2 23
#define R3 24
#define R4 25
#define R5 26
#define R6 27
#define R7 28
#define R8 29

int cmd = 0;

boolean SR1 = false;
boolean SR2 = false;
boolean SR3 = false;
boolean SR4 = false;
boolean SR5 = false;
boolean SR6 = false;
boolean SR7 = false;
boolean SR8 = false;

// vytvorime seriovy port na pinu 10 a 11
SoftwareSerial RS485Serial(SSerialRX, SSerialTX); // RX, TX
int byteReceived;


 
void setup() 
{
 
 
  Serial.begin(9600);
  pinMode(SSerialTxControl, OUTPUT); 
  digitalWrite(SSerialTxControl, 0);  // Povolí přijímaní na modulu RS485
  RS485Serial.begin(14400); // rychlost RS485 musí být nastavená stejně jako na vysílači 
 
  pinMode(R1, OUTPUT);
  pinMode(R2, OUTPUT);
  pinMode(R3, OUTPUT);
  pinMode(R4, OUTPUT);
  pinMode(R5, OUTPUT);
  pinMode(R6, OUTPUT);
  pinMode(R7, OUTPUT);
  pinMode(R8, OUTPUT);

  digitalWrite(R1, HIGH);
  digitalWrite(R2, HIGH);
  digitalWrite(R3, HIGH);
  digitalWrite(R4, HIGH);
  digitalWrite(R5, HIGH);
  digitalWrite(R6, HIGH);
  digitalWrite(R7, HIGH);
  digitalWrite(R8, HIGH);
 
}
 
 
void loop()  {
   //načítání hodnot z RPI a spínání jednotlivích vístupů na rele liště
   if(Serial.available() > 0){
     cmd = Serial.read();
     
     if(cmd == '1'){
       if(SR1){
         digitalWrite(R1, HIGH);
         SR1 = false;
       }else{
         digitalWrite(R1, LOW);
         SR1 = true;
       }
     }
     
     if(cmd == '2'){
       if(SR2){
         digitalWrite(R2, HIGH);
         SR2 = false;
       }else{
         digitalWrite(R2, LOW);
         SR2 = true;
       }
     }
     
     if(cmd == '3'){
       if(SR3){
         digitalWrite(R3, HIGH);
         SR3 = false;
       }else{
         digitalWrite(R3, LOW);
         SR3 = true;
       }
     }
     
     if(cmd == '4'){
       if(SR4){
         digitalWrite(R4, HIGH);
         SR4 = false;
       }else{
         digitalWrite(R4, LOW);
         SR4 = true;
       }
     }
     
     if(cmd == '5'){
       if(SR5){
         digitalWrite(R5, HIGH);
         SR5 = false;
       }else{
         digitalWrite(R5, LOW);
         SR5 = true;
       }
     }
     
     if(cmd == '6'){
       if(SR6){
         digitalWrite(R6, HIGH);
         SR6 = false;
       }else{
         digitalWrite(R6, LOW);
         SR6 = true;
       }
     }
     
     if(cmd == '7'){
       if(SR7){
         digitalWrite(R7, HIGH);
         SR7 = false;
       }else{
         digitalWrite(R7, LOW);
         SR7 = true;
       }
     }
     
     if(cmd == '8'){
       if(SR8){
         digitalWrite(R8, HIGH);
         SR8 = false;
       }else{
         digitalWrite(R8, LOW);
         SR8 = true;
       }
     }
   }
   
 
   // když jsou nějaká data přijata na RS485
   if (RS485Serial.available()) 
   {   
    byteReceived = RS485Serial.read();    // Přečte byte z modulu RS485
    Serial.write(byteReceived);           // a odešle je na Serial Monitor
   }
 
}

Dále jako propojovací vodiče používám klasický UTP kabel 2 dráty pro data a po 2 drátech vedu napájení. Délka cca 8m (jedná se pouze o testovací propojení, v reálu bude vzdálenost od 3m do 30m) Oba konce jsou zakončeny odporem 110Ω.

Zde je i vyfocené zapojení u megy.



Moduly RS485 jsou na obou koncích napájeny přímo arduinem.

Někdo se zmiňoval o restartech. Jediné co pomáhá je vypnutí obou arduin kompletní odpojení modulu RS485 a vše zase zapojit a zapnout.

Kit

Re:Arduino nepřenáší data po sběrnici
« Odpověď #34 kdy: 11. 01. 2016, 22:28:33 »
Ten vodivý pytlík bych tedy pod malinou nenechával...


Mirek

Re:Arduino nepřenáší data po sběrnici
« Odpověď #35 kdy: 11. 01. 2016, 23:10:47 »
Wow abych pravdu řek začínám se ztrácet. Nejsem žádný velký technik je to v podstatě jen hobby. Tákže...

Knihovna by měla fungovat, jedná se o oficiální knihovnu pro arduino takže zde bych problém nehledal.
Důvěřuj, ale prověřuj.

Dále jako propojovací vodiče používám klasický UTP kabel 2 dráty pro data a po 2 drátech vedu napájení. Délka cca 8m (jedná se pouze o testovací propojení, v reálu bude vzdálenost od 3m do 30m) Oba konce jsou zakončeny odporem 110Ω.


Moduly RS485 jsou na obou koncích napájeny přímo arduinem.

Někdo se zmiňoval o restartech. Jediné co pomáhá je vypnutí obou arduin kompletní odpojení modulu RS485 a vše zase zapojit a zapnout.

Jestli nezabírá ani reset na arduinu, to to vypadá, že se ti zašvihnul jeden z budičů. Projdi si zpátky diskuzi, jeden z příspěvků byl o tom, jak navázat /přes odpor) datové linky na VCC nebo GND. Zkus to.

Pokud jde o zdrojáky, trochu mně překvapuje že přepínáš směr na Nanu - vždyť jen vysílá a nikdy nepřijímá. Zkus ho nastavit natvrdo na vysílání a ověř jestli problém trvá.

A jak se to chová když jdeš s rychlostí dolů? Třeba na 1200 bd?

Je něký důvod proč trváš na SoftwareSerial? Mně to přijde jako naprostá degradace tak skvělého zařízení jakým je jednočip.

Mirek

Re:Arduino nepřenáší data po sběrnici
« Odpověď #36 kdy: 11. 01. 2016, 23:18:09 »
Je něký důvod proč trváš na SoftwareSerial? Mně to přijde jako naprostá degradace tak skvělého zařízení jakým je jednočip.
Proboha, teď jsem si všimnul - proč používáš SoftwareSerial i na té MEGA? Vždyť ta má, jestli se dobře pamatuji, 4x HW serial port!!!

Jenda

Re:Arduino nepřenáší data po sběrnici
« Odpověď #37 kdy: 11. 01. 2016, 23:29:33 »
LPC4370 má pouhých 80 MSamples a můžeš tak reálně zkoumat analogové signály pouze do 8 MHz. To dneska nestačí ani na Arduino, nemá smysl se tím takhle zabývat.
Pro domácí bastlení je vhodné tohle http://www.rigolna.com/products/digital-oscilloscopes/ds1000e/ cena je na úrovni smartphone.
Já mám aplikace, kterým tahle rychlost stačí, ale zase potřebuju kontinuální sypání do počítače, ne jako tady, že to přečte milion samplů a pak je to chvíli počítá.

// software crack na osciloskop, proboha, kam jsme se to dostali

Ne. Ale že kombinace nastavení děličky pro HW UART a daného XTAL na straně jedné a XTAL + SW řešení UART na straně druhé může mít problémy se vzájemným časováním při asynchronní komunikaci.
Omlouvám se, s tím SW sériákem mě to nenapadlo, tam už je mi jasné, že s tím se to může chovat kdovíjak.

Ten vodivý pytlík bych tedy pod malinou nenechával...
RPi nemám, ale změřil jsem teď pytlík od OrangePi (vypadá stejně jako na fotce) a ani měřákem do 20 MΩ jsem nic nenaměřil (zkoušel jsem to zevnitř, zvenku, i ho propíchnout, kdyby to byla vodivá vrstva mezi nevodivými). Možná v Číně vyrobili fake antistatiku :-).

v

Re:Arduino nepřenáší data po sběrnici
« Odpověď #38 kdy: 12. 01. 2016, 00:53:01 »
Knihovna by měla fungovat, jedná se o oficiální knihovnu pro arduino takže zde bych problém nehledal.

Tim bych si nebyl tak jisty. Me Arduino Nano nechtelo spolehlive komunikovat s ESP-01 pomoci SoftwareSerial ani AltSoftSerial. AT prikazy, ktere generovaly kratke odpovedi, fungovaly v pohode, ale pri vypsani dostupnych siti to vzdy v polovine vypisu zacalo hazet bordel. S HW UART fungovalo vse bez problemu.

dustin

Re:Arduino nepřenáší data po sběrnici
« Odpověď #39 kdy: 12. 01. 2016, 07:52:18 »
// software crack na osciloskop, proboha, kam jsme se to dostali

U Rigolů je to známá věc, hardwarově modely jedné řady všechny stejný, funkce i parametry se aktivují kódem, který lze vygenerovat. Např. v signální cestě je filtr, který se zadáním kódu přemostí a 50MHz rázem jede do 100MHz. Na youtube jsou detailní analýzy včetně schémat. Výrobci to dává smysl, ušetří na výrobě více variant HW.

Jenda

Re:Arduino nepřenáší data po sběrnici
« Odpověď #40 kdy: 12. 01. 2016, 10:35:59 »
Tim bych si nebyl tak jisty. Me Arduino Nano nechtelo spolehlive komunikovat s ESP-01 pomoci SoftwareSerial ani AltSoftSerial. AT prikazy, ktere generovaly kratke odpovedi, fungovaly v pohode, ale pri vypsani dostupnych siti to vzdy v polovine vypisu zacalo hazet bordel.
Taky pokud na tom Arduinu Mega dělá současně něco jiného (nedej bože generujícího přerušení), tak se implementace SW sériáku nedostane „ke slovu“ a prošvihne bit.

Mirek

Re:Arduino nepřenáší data po sběrnici
« Odpověď #41 kdy: 12. 01. 2016, 14:58:13 »
// software crack na osciloskop, proboha, kam jsme se to dostali

U Rigolů je to známá věc, hardwarově modely jedné řady všechny stejný, funkce i parametry se aktivují kódem, který lze vygenerovat. Např. v signální cestě je filtr, který se zadáním kódu přemostí a 50MHz rázem jede do 100MHz. Na youtube jsou detailní analýzy včetně schémat. Výrobci to dává smysl, ušetří na výrobě více variant HW.

Je to víceméně tak. Ale není to celá pravda. U některých typů Rigolů jsou použité některé součástky (operáky, AD, ...) které jsou parametrově odpovídající slabšímu modelu. Poté, co vyrobí desky, změří frekvenční parametry vstupů a rozdělí je do dvou kategorií - lepší model (vyšší vzorkovací freq) a slabší model. A sériovým/modelovým číslem se jen odemknou příslušné parametry/funkce.

Karel

Re:Arduino nepřenáší data po sběrnici
« Odpověď #42 kdy: 12. 01. 2016, 16:40:00 »
Ten vodivý pytlík bych tedy pod malinou nenechával...
RPi nemám, ale změřil jsem teď pytlík od OrangePi (vypadá stejně jako na fotce) a ani měřákem do 20 MΩ jsem nic nenaměřil (zkoušel jsem to zevnitř, zvenku, i ho propíchnout, kdyby to byla vodivá vrstva mezi nevodivými). Možná v Číně vyrobili fake antistatiku :-).

Povrchový odpor to mívá v řádech 10^10 Ohm. Takže měřákem se nenaměří skoro nic. Navíc malina má ochranný lak. Prakticky u všeho, co se lidem dostane do ruky, je riziko zanedbatelné.

dustin

Re:Arduino nepřenáší data po sběrnici
« Odpověď #43 kdy: 12. 01. 2016, 21:23:04 »
Je to víceméně tak. Ale není to celá pravda. U některých typů Rigolů jsou použité některé součástky (operáky, AD, ...) které jsou parametrově odpovídající slabšímu modelu. Poté, co vyrobí desky, změří frekvenční parametry vstupů a rozdělí je do dvou kategorií - lepší model (vyšší vzorkovací freq) a slabší model. A sériovým/modelovým číslem se jen odemknou příslušné parametry/funkce.

Máš k tomu nějaký linky? Nikde jsem se s tím zatím nesetkal. Díky.

Honza

Re:Arduino nepřenáší data po sběrnici
« Odpověď #44 kdy: 13. 01. 2016, 11:50:38 »
Tak jsem vyhodil SW serial a použil HW, také jsem snížil Bd z 14400 na 2400 a vypadá to že vše zatím funguje jak má.

Jediné čeho se bojím je zahřívání MAX485 čipu na straně s nanem. Sotva na něm udržíme prst. Hlavně po delší době běhu. Může toto zahřívání mít vliv na jeho funkčnost, nebo se jedná o běžný jev? Jinac bych musel začít řešit nějaké chlazení. A s ohledem ze celý termostat (nano, MAX485, čidlo teploty a displej ) se musí vejít do nizkoprofilove krabice na vypínač ani nevím zda bych se tam vešel. Ani nevím jestli se dá tak malí chladič sehnat.