Перейти к содержанию

Чтение Ключей Dallas


-=gga=-

Рекомендуемые сообщения

Ну собсна интересует как читать те самые "таблетки" фирмы Dallas. На сколько я знаю то это делаеться по интерфейсу 1-Write. объясните плиз по подробнее, как читать записанный в них код?

Компилятор CodeVisionAVR C Compiler

МК - Atmega16

Я был механик, я есть механик, я буду механик

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Ну собсна интересует как читать те самые "таблетки" фирмы Dallas. На сколько я знаю то это делаеться по интерфейсу 1-Write. объясните плиз по подробнее, как читать записанный в них код?

Компилятор CodeVisionAVR C Compiler

МК - Atmega16

На сайте Далласа есть даташит на это Баттон. Кроме этого есть аппноуты по OneWire. В аппноутах есть все алгоритмы и примеры на метаязыке типа Си. С наскоку в форуме этого не объяснишь и на чужих реализациях не разберешся. У меня есть на русском только основной 192-ой аппноут, но я забыл откуда его качал. Попробуйте в поиске забить Dallas AN192 , должно получиться...

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

В догон... Вчера инсталлировал микроСи, а в нем есть семпл для Баттона но на ПИК...

/*
* Project name:
 I_Button (Using 1Wire(tm) communication protocol)
* Copyright:
 (c) mikroElektronika, 2005 - 2006
* Revision History:
  20050512:
	- Initial release;
* Description:
 The example demonstrates 1-wire communication with electronic key DS1990A
 connected to RD2 pin. Upon reset, PIC reads all 64 bits (8 bytes) of
 iButton's unique key sequence and prints them on LCD in hex.
* Test configuration:
 MCU:			 PIC16F877A
 Dev.Board:	   EasyPic4
 Oscillator:	  HS, 8.000MHz
 Ext. Modules:	DS1990A I-Button, GND to board GND, signal to pin RD2
 SW:			  mikroC v5.0
* NOTES:
 None.
*/


char text1[]= " mikro iButton:   ";							   // message1 on LCD
char text2[] =" not present	 ";							 // message2 on LCD
unsigned char j1, j2, j3, j4, j5, j6, j7, j8; // j1..j8 accept code from iButton
unsigned char presenceCheck;

// -------------------------------------------------------------
// Procedure for converting byte variable to HEX and displaying
// it on LCD display.
//
// procedure int2hex(row, start_x : byte; number : byte);
// row	 - LCD line,
// start_x - position of first hex digit (left to right)
// -------------------------------------------------------------
void Int2Hex(char row, char start_x, char number) {
 char high,low;

 // high nibble
 high = ((number & 0xF0) >> 4) + 48;	  // + '0'
 if (high > 57u)
high += 7;							 // > '9'


 // low nibble
 low = (number & 15u) + 48;			   // +'0' low nibble
 if (low > 57u)
low += 7;							  // > '9'

 Lcd_Chr(row, start_x, high);
 Lcd_Chr(row, start_x + 1, low);
}//~

void main() {
 ADCON1 = 255;					 // pin Rd2 is digital I/O
 TRISD  = 255;
 PORTB  =   0;						// initialize portb on 0
 TRISB  =   0;						// portb is output
 Lcd_Init(&PORTB);
 Lcd_Cmd(LCD_CURSOR_OFF);
 LCD_Out(1, 1, text1);				// print initial message

do {
  // first, we read iButton if present on pin RE2;
  // if not present, print appropriate message on LCD
  OW_Reset(&PORTD,2);		   // onewire reset signal
  OW_Write(&PORTD,2,0x33);	  // read iButton
  Delay_us(120);				// pause
  j1 = OW_Read(&PORTD,2);	   // read 8 bytes of Dallas iButton
  j2 = OW_Read(&PORTD,2);	   //
  j3 = OW_Read(&PORTD,2);	   //
  j4 = OW_Read(&PORTD,2);	   //
  j5 = OW_Read(&PORTD,2);	   //
  j6 = OW_Read(&PORTD,2);	   //
  j7 = OW_Read(&PORTD,2);	   //
  j8 = OW_Read(&PORTD,2);	   //

  // if iButton is not present, j1 ~ j8 will be at 255, so we can easily
  // test them:
  presenceCheck = j1 & j2 & j3 & j4 & j5 & j6 & j7 & j8;

  if (presenceCheck == 0xFF)	 // if iButton is not present
	LCD_Out(2, 1, text2);		// print message
  else {
	// if iButton is present, convert codes to hex and print on LCD
	Int2Hex(2, 1,  j8);
	Int2Hex(2, 3,  j7);
	Int2Hex(2, 5,  j6);
	Int2Hex(2, 7,  j5);
	Int2Hex(2, 9,  j4);
	Int2Hex(2, 11, j3);
	Int2Hex(2, 13, j2);
	Int2Hex(2, 15, j1);
  }
  Delay_ms(500);
} while(1);						// stay in loop
}//~!

Изменено пользователем my504

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

B Протеусе целый проект с исходниками валяется для AT90S8515. Под мегу 16 переделывается элементарно. Только что попробовал - все работает. Лежит где-то там:

C:\Program Files\Labcenter Electronics\Proteus 7 Professional\SAMPLES\VSM for AVR\One-Wire\NETWORK...

Любой, заслуживающий внимания, опыт приобретается себе в убыток...

Ссылка на комментарий
Поделиться на другие сайты

Ну проект переделал под мегу16, но вот как сравнить код ключа, с раннее записанным кодом ?

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

Я такое видел, но не знаю как это реализовать :(

Я был механик, я есть механик, я буду механик

Ссылка на комментарий
Поделиться на другие сайты

Пишем в EEPROM, начиная с некоторого адреса (только не с первого), нужные байты ключа.

В проге делаем примерно так:

unsigned char EEPROM_read_8 (unsigned char Address) //функция чтения числа из EEPROM по заданному адресу
{
while (EECR & (1<<EEPE));
EEARL= Address;
EECR |= (1<<EERE);
return EEDR;
}
....
далее
for (j=1;j<6;j++) {
if (EEPROM_read_8 (Nach_Address+j-1) != rom_code[0,j]) ALARM!!!; сравниваем побайтно зашитые коды
						};
...

Это теоретически. Но должно работать. Если нет, то меня поправят...

Любой, заслуживающий внимания, опыт приобретается себе в убыток...

Ссылка на комментарий
Поделиться на другие сайты

давай по порядку :)

address это переменная, в которую я должен записать аддресс с которого я должен начать читать ключи ? Для начала я туда 6 записал.

Вот тут многое не понятно.

{

while (EECR & (1<<EEPE)); //что такое EECR, EEPE, EEARL, и EECR ?

EEARL= Address;

EECR |= (1<<EERE);

return EEDR;

}

Компилятор выдаёт ошибку на EERE, и плюс ещё две ошибки, на строчках:

unsigned char EEPROM_read_8 (unsigned char Address);

и

if (EEPROM_read_8 (Nach_Address+j-1) != rom_code[0,j]);

Вот весь код:

#include <mega16.h>
#asm
  .equ __w1_port=0x1B ;PORTA
  .equ __w1_bit=6
#endasm
#include <1wire.h>
#include <stdio.h>    
#define DS1990_FAMILY_CODE 1
#define SEARCH_ROM 0xF0
#define MAX_DEVICES 8
unsigned char rom_code[MAX_DEVICES,9];

char Address=6;   
unsigned char i,j,devices;
unsigned char n=1;
void main(void)
{  
PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x00;

UCSRA=0x00;
UCSRB=0x08;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x19;

// 1 Wire Bus initialization
w1_init();   
// print welcome message
printf("1-Wire MicroLan Net demo\n\r");

// detect how many 1 Wire devices are present on the bus
devices=w1_search(SEARCH_ROM,&rom_code[0,0]);
printf("%u device(s) found\n\r",devices);
for (i=0;i<devices;i++)
 {      
   // Acknowledge DS1990 family code.
   if (rom_code[i,0]==DS1990_FAMILY_CODE){
      printf("DS1990  #%u serial number:",n++);
      }   
printf("\n\r");
}
unsigned char EEPROM_read_8 (unsigned char Address); 
{
while (EECR & (1<<EEPE));
EEARL= Address;
EECR |= (1<<EERE);
return EEDR;
}
   for (j=1;j<=6;j++)
       printf(" %02X",rom_code[i,j]); 
   if (EEPROM_read_8 (Nach_Address+j-1) != rom_code[0,j]); 
} 

Я был механик, я есть механик, я буду механик

Ссылка на комментарий
Поделиться на другие сайты

По порядку...

EECR-регистр управления EEPROM

EEARL-младший байт адреса

EEDR-регистр данных

EEPE-для м16 это EEWE - читаем даташит, кто че делает...

Компилятор выдает ошибки, потому что отдельные биты в нем не определены. Это можно сделать директивой #define...

Можно записать как в файле внизу - так более прямолинейно и понятно. Код рабочий. Схемка на рисунке. Код ключа (в Протеусе) B8C52C. Будем менять его - будет ругаться терминал...

Еще... Чет я не могу в Протеусе EEPROM залить. В итоге эти пляски с бубном для записи в него...

post-20311-1202207251_thumb.jpg

ds.txt

Любой, заслуживающий внимания, опыт приобретается себе в убыток...

Ссылка на комментарий
Поделиться на другие сайты

Так про чтение этих ключей написанно прямо в "хелпе" в код-вижене, нажимаем Ф1 и пршем в поиске DS1990 и там всё будет.

Неленитесь нажать F1 перед тем как задавать вопрос ;)

LINUX SERVER больше информации на моей домашней страничке... - пока в стадии разработки, но у него есть 2 UART порта доступных по web-интерфейсу и стоит этот сервак у меня дома :)

Ссылка на комментарий
Поделиться на другие сайты

Дык задача то была:

Ну проект переделал под мегу16, но вот как сравнить код ключа, с раннее записанным кодом ?

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

Я такое видел, но не знаю как это реализовать sad.gif

Любой, заслуживающий внимания, опыт приобретается себе в убыток...

Ссылка на комментарий
Поделиться на другие сайты

Я ещё хотел спросить про шифровые датчики температуры, но потом передумал, врмени нету, учёба....

Спасибо Goodefine код работает, всё гуд, пока вопросов нету :)

Я был механик, я есть механик, я буду механик

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...