Ethernet и мах6675

MacSim
Offline
Зарегистрирован: 28.11.2012

пытаюсь подключить к ардуино нано модуль ethernet и max6675. По отдельности на демках все работает. Использую библиотеки <UIPEthernet.h>  и "max6675.h" (от адафрута).

#define MACADDRESS 0xA4,0xB7,0x5C,0x03,0x04,0x05
#define MYIPADDR 192,168,1,177
#define MYIPMASK 255,255,0,0
#define MYDNS 192,168,1,1
#define MYGW 192,168,1,1
// telnet defaults to port 23
#define LISTENPORT 2000

uint8_t mac[6] = {MACADDRESS};
uint8_t myIP[4] = {MYIPADDR};
uint8_t myMASK[4] = {MYIPMASK};
uint8_t myDNS[4] = {MYDNS};
uint8_t myGW[4] = {MYGW};
#include <UIPEthernet.h>
#include "max6675.h"

int thermoDO = 12;
int thermoCS = 9;
int thermoCLK = 13;

MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);

EthernetServer server(2000);

EthernetClient clients = server.available();

  
void setup() {
  Serial.begin(9600);

  Ethernet.begin(mac, myIP, myDNS, myGW, myMASK);
  // start listening for clients
  server.begin();
  
  
  pinMode(10, OUTPUT); digitalWrite(10, HIGH);
  pinMode(9, OUTPUT); digitalWrite(9, LOW);
  Serial.println("MAX6675 test");
  // wait for MAX chip to stabilize
  delay(500);
}

void loop() {
  // basic readout test, just print the current temp
  
   Serial.print("C = "); 
   Serial.println(thermocouple.readCelsius());
   
 
   delay(1000);
}

Вместе не работают.

у изернета cs -10,mosi -11,sck-13, miso-12

у 6675      cs-9,sck-13, miso-12

посмотрел библиотеки, изернет работает через аппаратный спи, а вот 6675 дергает ноги сама, через програмный спи.

в этом думается кроется проблема, но как их подружить? писать под 6675 под аппаратный спи, как вариант...?

sadman41
Offline
Зарегистрирован: 19.10.2016

Ну, назначьте другие ноги максу...

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

MacSim пишет:

Вместе не работают.

у изернета cs -10,mosi -11,sck-13, miso-12

у 6675      cs-9,sck-13, miso-12

Я бы тоже не работал.

MacSim
Offline
Зарегистрирован: 28.11.2012

sadman41 пишет:

Ну, назначьте другие ноги максу...

об этом думал, но заняты все. подумываю как сделать чтоб работало именно в таком подключении

MacSim
Offline
Зарегистрирован: 28.11.2012

ЕвгенийП пишет:

MacSim пишет:

Вместе не работают.

у изернета cs -10,mosi -11,sck-13, miso-12

у 6675      cs-9,sck-13, miso-12

Я бы тоже не работал.

если битом SPE в регистре SPCR выключать на время работы с мах-ом? поможет?

помимо констатации факта предложения есть куда копать?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

MacSim пишет:

помимо констатации факта предложения есть куда копать?

Предложений намного больше, чем желания бить пальцы об клавиши.

Вот Вам ведь лень было подробно задачу описать. В итоге, человек высказал дельное предложение, ан фиг там - пинов свободных нет - зря он пальцы бил.

Я сейчас что-то выскажу, выяснится, что ещё чего-то нет. Зачем? Опишете задачу полностью, там видно будет.А если Вам по клавишам лень стучать, так мне тем более.

sadman41
Offline
Зарегистрирован: 19.10.2016

Так зачем биты-шмиты. Он же, вроде, не транслирует сам по себе. CS прижать, отпустить, подождать пока конверсия закончится, прижать и читать. Только MISO/MOSI не путать и всё...

 

MacSim
Offline
Зарегистрирован: 28.11.2012

sadman41 пишет:

Так зачем биты-шмиты. Он же, вроде, не транслирует сам по себе. CS прижать, отпустить, подождать пока конверсия закончится, прижать и читать. Только MISO/MOSI не путать и всё...

 

сори. пересмотрел несколько раз. не вижу где напутал мисо и моси. ноги cs меняю для работы с устройствани. попробывал прижать, отпустить, подождать пока конверсия закончится, прижать и читать. выдает 0 температуру

   digitalWrite(10, HIGH);
    digitalWrite(9, LOW);
    delay(100);
    digitalWrite(9, HIGH);
    delay(1000);
    digitalWrite(9, LOW);
     Serial.println(thermocouple.readCelsius());
    delay(10);
    digitalWrite(9, HIGH);
    digitalWrite(10, LOW);

 

MacSim
Offline
Зарегистрирован: 28.11.2012

ЕвгенийП пишет:

MacSim пишет:

помимо констатации факта предложения есть куда копать?

Предложений намного больше, чем желания бить пальцы об клавиши.

Вот Вам ведь лень было подробно задачу описать. В итоге, человек высказал дельное предложение, ан фиг там - пинов свободных нет - зря он пальцы бил.

Я сейчас что-то выскажу, выяснится, что ещё чего-то нет. Зачем? Опишете задачу полностью, там видно будет.А если Вам по клавишам лень стучать, так мне тем более.

сори, но что еще написать не знаю. если подробнее:

без подключения библиотеки изернета в сериал поступают данные температуры с макса, при инклюде библиотеки изернета и инициализации, как в первом посте, данные температуры с макса идут нулевые.

sadman41
Offline
Зарегистрирован: 19.10.2016

MacSim пишет:

попробывал прижать, отпустить, подождать пока конверсия закончится, прижать и читать. выдает 0 температуру

На текущий момент могу вам дать только свой исходник, но там SoftSPI. Основной алгоритм просматривается: https://github.com/zbx-sadman/zabbuino/blob/experimental/src/spi_max6675.cpp 
Думаю, что можно как под SPI.transfer перепилить, так и просто ногами SPI подергать в софт-режиме.

 

MacSim
Offline
Зарегистрирован: 28.11.2012

sadman41 пишет:

MacSim пишет:

попробывал прижать, отпустить, подождать пока конверсия закончится, прижать и читать. выдает 0 температуру

На текущий момент могу вам дать только свой исходник, но там SoftSPI. Основной алгоритм просматривается: https://github.com/zbx-sadman/zabbuino/blob/experimental/src/spi_max6675.cpp 
Думаю, что можно как под SPI.transfer перепилить, так и просто ногами SPI подергать в софт-режиме.

 

открыл. спасибо изучу

MacSim
Offline
Зарегистрирован: 28.11.2012

пока нарыл:

SPCR=80 SPSR=1, т.е.

установлено удвоение частоты  спи и делитель на 4, а для мах6675 16кварц\2 многовато будет.

настройки фазы и полярности нормальные для мах6675. разобрался как прочитать мах через аппаратный спи. сегодня уже спать пойду. завтра заюзаю его через  аппаратный.

удвоение убрал, изернет работает...

 

sadman41
Offline
Зарегистрирован: 19.10.2016

В SPI.h скорость устанавливается в 4000000, UIPEthernet ее не меняет, MAX6675 максимальной имеет 4.3MHz... Теоретически все должно сложиться. В любом случае можно перед началом обмена через SPI.beginTransaction(SPISettings(SPI_CLOCK, MSBFIRST, SPI_MODE0)); поставить SPI_CLOCK таким, какой требуется.

MacSim
Offline
Зарегистрирован: 28.11.2012

sadman41 пишет:

В SPI.h скорость устанавливается в 4000000, UIPEthernet ее не меняет, MAX6675 максимальной имеет 4.3MHz... Теоретически все должно сложиться. В любом случае можно перед началом обмена через SPI.beginTransaction(SPISettings(SPI_CLOCK, MSBFIRST, SPI_MODE0)); поставить SPI_CLOCK таким, какой требуется.

SPSR=0;  SPCR=80; да на частоте ф/4 считывает. набрасал так:

digitalWrite(10, HIGH);
   digitalWrite(9, LOW);
   delay(500);
   SPDR = 0;
   while(!(SPSR & (1<<SPIF)));
   _tzreal[1] = SPDR;
   SPDR = 0;
   while(!(SPSR & (1<<SPIF)));
   _tzreal[2] = SPDR;
   digitalWrite(9, HIGH);
   digitalWrite(10, LOW);
  

немного протупил с большим числом 12 бит с датчика, потом вкурил - два последних бита это уже десятки. работает, показывает. спасибо за помощь. пойду паять остальные 7 датчиков

  

MacSim
Offline
Зарегистрирован: 28.11.2012

sadman41 пишет:

В SPI.h скорость устанавливается в 4000000, UIPEthernet ее не меняет, MAX6675 максимальной имеет 4.3MHz... Теоретически все должно сложиться. В любом случае можно перед началом обмена через SPI.beginTransaction(SPISettings(SPI_CLOCK, MSBFIRST, SPI_MODE0)); поставить SPI_CLOCK таким, какой требуется.

в спи  ставиться делитель частоты кристала и множител на 2. по умолчанию делитель на 4 стоит, но и множитель включен. поэтому частота 8000000 получалась, как отмечено 4.3 максимум для макса6675. записал 0 в разряд SPI2X регистра SPSR - выключил удвоение, читает через аппаратный