ТермомЭтр Помогите с созданием прошивки на Cи

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18657
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: ТермомЭтр Помогите с созданием прошивки на Cи

Сообщение ARV »

shev377 писал(а):Нифига в этом даташите нет,
Единственное что я понял, это то, что нужно читать данные из регистра AAh КАк?*?? там нифига не сказано.
странно вы как-то даташиты читаете... цитирую:
DS1821 FUNCTION COMMAND SET Table 4
1-Wire Bus Activity
Command Description Protocol After Command is Issued
TEMPERATURE CONVERSION COMMANDS
Read Reads last converted temperature AAh Master receives 8-bit temperature
Temperature value from temperature register. value from DS1821.
Start Convert T Initiates temperature conversions. EEh None
Stop Convert T Halts temperature conversions. 22h None
это на странице 10. а на странице 13 есть пример обмена с датчиком. если вы имеете низкоуровневые функции для работы с 1-wire - послать сброс, потом послать команду запуска измерения температуры, затем подождать определенное время, снова послать сброс и команду чтения температуры - это так сложно? я вам намекал на статьи - вы их находили? читали? вот это читали? а это? почему у вас все еще остаются вопросы?! :shock:
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Реклама
shev377
Открыл глаза
Сообщения: 48
Зарегистрирован: Пт янв 29, 2010 21:34:59

Re: ТермомЭтр Помогите с созданием прошивки на Cи

Сообщение shev377 »

читал....
Временно вопрос меняется на прежний, Нашёл датчик DS1820 и DS18b20

Не находит мк девайсы.........

Код: Выделить всё


#include <mega32.h>
#include <delay.h>

// 1 Wire Bus functions
#asm
   .equ __w1_port=0x12 ;PORTD
   .equ __w1_bit=6
#endasm
#include <1wire.h>

// DS18b20 Temperature Sensor functions
#include <ds18b20.h>
#include <stdio.h>         
void main(void)
{       
                     

PORTA=0x00;
DDRA=0xFF;
PORTB=0x00;
DDRB=0xFF;
PORTC=0x00;
DDRC=0xFF;
PORTD=0x00;
DDRD.0=1;
DDRD.1=1;
DDRD.2=1;
DDRD.3=1;
DDRD.4=1;
DDRD.5=1;
DDRD.6=0;
DDRD.7=1;


devices=w1_init();             
while(devices>0)                 
     { 
            
      PORTA.1=1;  
      PORTA.2=1;  
      PORTA.3=1;  
          delay_ms(500);        
     };  
       
      
      
      
      
      
      
}


Почему не загараются светодиоды
PORTA.1
PORTA.2
PORTA.3

ТЕ почему не находит датчики?





схематика такая,
Vq датчика подключен на д6 ножку мк
Земля к Земле
питание к питанию

Резистор между питанием и vQ номиналами в 4.7 Ком, пробовал ставить 20 Ком





проверял, порт на мк не спален, (PAD.6=0 PORTD.6=1 на выходе был нужный ток и 5.1В)
Реклама
shev377
Открыл глаза
Сообщения: 48
Зарегистрирован: Пт янв 29, 2010 21:34:59

Re: ТермомЭтр Помогите с созданием прошивки на Cи

Сообщение shev377 »

подключил светодиод на 3 вольта к ножке д6, при включении мк светодиод не мигает, хотя пыйдее же должен (инициализация iwire шины, посылка байта чтобы заставить датчик давать температуру)? Поставил другой мк, таже хрень, в схеме ошибок нет, полярность соблюдаю

Проверил другими датчиками DS18B20 Ds18B20 (второй) DS18S20 DS1820
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18657
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: ТермомЭтр Помогите с созданием прошивки на Cи

Сообщение ARV »

а где в вашей программе собственно поиск девайсов? вы сделали инициализацию шины 1-wire и думаете, что радостные девайсы при этом сами полезут в ваши переменные?!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Реклама
Эиком - электронные компоненты и радиодетали
shev377
Открыл глаза
Сообщения: 48
Зарегистрирован: Пт янв 29, 2010 21:34:59

Re: ТермомЭтр Помогите с созданием прошивки на Cи

Сообщение shev377 »

ну во всех примерах делается именно так?! Разве w1_init не ищет девайсы?
Реклама
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18657
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: ТермомЭтр Помогите с созданием прошивки на Cи

Сообщение ARV »

shev377 писал(а):ну во всех примерах делается именно так?! Разве w1_init не ищет девайсы?
вы пользуетесь CVAVR? там отличный хелп ко всем встроенным функциям - потрудитесь изучить. так же не мешает иной раз обращать внимание на уже имеющиеся в изобилии исходники, только не просто их компилировать. а вчитываться в каждую строчку...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Реклама
shev377
Открыл глаза
Сообщения: 48
Зарегистрирован: Пт янв 29, 2010 21:34:59

Re: ТермомЭтр Помогите с созданием прошивки на Cи

Сообщение shev377 »

http://avru.cwx.ru/uchebnik/radota_s_da ... 18b20.html
Я ничего не путаю?
Ну и теперь в самой программе пишем devices=w1_init(); этой строкой ищем устройства 1Wire, которые подключены к МК, а число найденных устройств запишется в переменную devices Теперь, если переменная devices больше нуля, то МК знает что есть подключенный датчик, а может и не один.
shev377
Открыл глаза
Сообщения: 48
Зарегистрирован: Пт янв 29, 2010 21:34:59

Re: ТермомЭтр Помогите с созданием прошивки на Cи

Сообщение shev377 »

Ну хорошо, вот с адресацией,
Шью это

Код: Выделить всё

/*****************************************************
Chip type           : ATmega32
Program type        : Application
Clock frequency     : 8,000000 MHz
Memory model        : Small
External SRAM size  : 0
Data Stack size     : 512
*****************************************************/

#include <mega32.h>

#asm                             //сообщаем куда подключен датчик
   .equ __w1_port=0x12 ;PORTD
   .equ __w1_bit=6
#endasm
#include <1wire.h>               //библиотека работы с 1Wire
#include <ds18b20.h>             //библиотека для работы с датчиком ds18b20
                  
#include <delay.h>               //библиотека задержки

#include <stdio.h>               //ненаю что за библиотека, но без неё неполучается
unsigned char rom_code[8][9];    //масив с адресами найденых датчиков

void main(void)                  
{



unsigned char devices, i;        //переменная в которой количество присоеденённых датчиков, и номер выбранного датчика
int temp;                        //переменная для хранения температуры




// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 
PORTA=0x00;
DDRA=0xFF;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
PORTB=0x00;
DDRB=0xFF;

// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
PORTD=0x00;
DDRD=0xBF;











PORTC.0=1;      
     
w1_init();

devices=w1_search(0xf0,rom_code);   //ищим датчики, и записуем их адреса в масив
while(devices>0)                 //бесконечный цикл, если датчик подключон
      {   
          if(!PINC.0){           //Если нажата кнопка
              i++;               //Увиличиваем переменную "i" на 1
              delay_ms(300);     //Ждём 300мс для "анти-дребезга"
          }
          if(i>=devices){        //Если "i" больше или равно найденым датчикам
          i=0;                   //тогда "i" равно нулю
          }

          temp=ds18b20_temperature(&rom_code[i][0]);  //читаем температуру с выбранного датчика

          if (temp>1000){               //если датчик выдаёт больше 1000
             temp=4096-temp;            //отнимаем от данных 4096
             temp=-temp;                //и ставим знак "минус"
          }
 

PORTD=0;
PORTD.3=1;
PORTB=255;
PORTB.6=0;
PORTB.5=0;
PORTB.4=0;
PORTB.2=0;
PORTB.1=0; 

delay_ms(1);
PORTD=0;
PORTD.2=1;
PORTB=255;
PORTB.7=0;
PORTB.6=0;
PORTB.3=0;
PORTB.2=0;
PORTB.1=0;  

delay_ms(1);
PORTD=0;
PORTD.1=1;
PORTB=255;
PORTB.7=0;
PORTB.6=0;
PORTB.5=0;
PORTB.3=0;
PORTB.2=0; 
PORTB.1=0;   
delay_ms(1);





      };


while(devices==0)                 //бесконечный цикл, если датчик не подключон
{
PORTD=0;
PORTD.3=1;
PORTB=255;
PORTB.6=0;
PORTB.5=0;
PORTB.3=0;
PORTB.2=0; 
PORTB.1=0;   

delay_ms(1);
PORTD=0;
PORTD.2=1;
PORTB=255;
PORTB.7=0;
PORTB.3=0; 
PORTB.4=0; 
PORTB.2=0;
PORTB.1=0;  

delay_ms(1);
PORTD=0;
PORTD.1=1;
PORTB=255;
PORTB.7=0;
PORTB.6=0;
PORTB.5=0;
PORTB.3=0;
PORTB.2=0; 
PORTB.1=0;   
delay_ms(1);


};







}





А получаю это
Изображение
Тобиш неа, нет девайсов от даласа
shev377
Открыл глаза
Сообщения: 48
Зарегистрирован: Пт янв 29, 2010 21:34:59

Re: ТермомЭтр Помогите с созданием прошивки на Cи

Сообщение shev377 »

Слушайте! МЕНЯ ОСИНИЛО!!!!!!
А может это индивидуальная непереносимость Mega32 16PU xxxсерии датчиков даллас???
У меня ещё мега 48 есть, только её паять страшно, какая она маленькая, может стоит попробовать?
возможно такое?
Аватара пользователя
artmasterpro
Прорезались зубы
Сообщения: 241
Зарегистрирован: Пт янв 18, 2008 01:41:27

Re: ТермомЭтр Помогите с созданием прошивки на Cи

Сообщение artmasterpro »

Если собирать этот пример в протоусе те не работает, не находит датчики. Облазил весь инет, все тоже самое.
http://avru.cwx.ru/uchebnik/radota_s_da ... 18b20.html
Главная заповедь электронщика:- Не крути две ручки сразу
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»