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

serj32

Участник
  • Постов

    29
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о serj32

  • Звание
    Участник
    Участник

Информация

  • Город
    Array
  1. Я пока контроллер не подключал в COM воткнул адаптер RS232-ТТЛ и закоротил выход со входом. Начинаю вводить 1число(символ) программа пишет 4 байта отправлено и 4 принято, смотрю анализатором первый байт правильный а остальные билиберда,и почему отправляеш один байт а прога отправляет 4 байта. Программа для меня пока очень сложная что бы самому разобраться. Новерно слишком пока амбициозное моё желание.
  2. Эта штука заработала -только COM3 заменил на COM1 Анализатором посмотрел -ерунда какая то идёт не международная ни шестнадцатиричная принятые данные новерно будут в масиве buffer и почему то передаёт по 4 байта. Буду пробывать код Alex11
  3. А какие там библиотеки подключать? i-укажет мне количество байт ну а прочитаю из масива Data Правильно?
  4. А вот http://gdansk.bradley.edu/olekmali/courses...AL_WIN32.C.HTML в VS 2008 скомпилировался без ошибок только на выполнении выдаёт что не может создать COM порт а на ноуте у меня его и нет ,сейчас на старом попробую, ну остаётся выцепить переменную где лежат входные данне с порта.
  5. Здравствуйте.Вот начал изучать язык программирования C и хотел бы связать компьютер с микроконтроллером AVR-так легче изучать. Операционка XP 32разряда.Может быть есть у кого для консольного приложения код что бы считывал с ноги RxD и закидывал в какую нибудь переменную 8 бит ну а зная в какой переменной находятся данные на дисплей я их выведу сам. Спасибо.
  6. Подскажите ,что может означать одиночная точка в строке, в коде. Вот например строка 14 здесь http://cxem.net/mc/book52.php Спасибо.
  7. Да я буду использовать Pt100.Почему я задал этот вопрос.Вот если я буду выводить на дисплей показания по формуле ADC CODE/32 -256 то при реальной температуре в 400 гр. на дисплее будет 376,56гр. Значит надо пересчитать.Вот например интервал 375гр. до 400гр.Представить что промежуточные значения да и крайние точки (375гр. и 400гр) лежат на одной прямой-пересчитывать по линейной функции и так для каждого интервала индивидуально.Нахождение линейной функции, когда известны две точки на прямой это вроде не проблема точки этой функции будут такими А(X1= 354,41 Y1=375) , В(X2=376,56 Y2=400). И ещё у меня вопрос.Вот MAX31865 у неё питание 3,3 В., а у меня ATmega8 с питанием 5 В. А если я возьму ATmega8A и запитаю её от 3,3 В. то отогда будут ли "понимать" друг друга обе микросхемы.Спасибо.
  8. Вот в даташет табл.9 колонка RTD DATA REG (01h-02h) (hex) Вот это результирующий код.Как привязаться к температуре ну и вывестиеё на дисплей. Новерно можно(пусть будет положительный участок) Известные интервалы рез.кода представить как линейную функцию ну и пересчитать в температуру. Подскажите кто знает.Спасибо.
  9. Я опишу вопрос с самого начала и подробно. Числа и пример я взял отсюда http://chipmk.ru/index.php?option=com_cont...5&Itemid=29 там дано в примере следующее; - Match Rom Command, 0x55 -------- отправляет ПК; -------ROM Family Code, 0x28 ------------- отправляет ПК; ---------------ROM Code, 0x000001272056 ------ отправляет ПК; ---------------ROM CRC, 0x27 ----------------------- отправляет ПК;-это контрольная сумма Дело в том ,что с числом ROM Code, 0x000001272056 не получается CRC не равно 0x27 Я предполагаю что датчик при приёме числа из которого он посчитает CRC расположит байты в следующем порядке- --первый принятый байт будет старшим -вот так 0x28562027010000 вот теперь CRC=0x27 -но если подставить в калькулятор сразу сер.номер вот так 0x28000001272056 то CRC будет неверным. Правильны ли мои рассуждения? Спасибо. И ещё.Вот у меня есть DS18B20,далее я скачаю отсюда прогу http://arvresearch.nm.ru/owdrv/index.dhtml чтобы узнать серийный номер.Вот прграмма мне выдала Adr:000005D97080-это и есть сер.номер. Мне необходимо теперь узнать СRC потому ,что я должен буду передавать его для датчика( для 7 байт) В калькулятор я должен ввести число 0x288070D9050000 -из этого числа я должен вычислить CRC Как можно видеть байты серийного номера поменялись. Правильно ли я считаю CRC ? Спасибо.
  10. Значит датчик подсчитает CRC для числа 0x28562027010000 и никак для 0x28000001272056 0x28-это для DS18B20 контроллер (мастер) отправит число в такой последовательности? с начала 0x28 -код семейства DS18B20 далее 0x56 ......... 0x20 ......... 0x27 ......... 0x01 ......... 0x00 ......... 0x00 ......... 0x27 - восьмой байт CRC
  11. Значит если у датчика сер.номер 0x000001272056 то если датчик примет этот номер, то CRC он подсчитает для числа 0x562027010000 Так ли это подскажите пожалуйста. Считаю я калькулятором CRC http://arv.radioliga.com/component/option,...ileinfo/id,136/ Спасибо.
  12. Считаю,что тема была бы не законченной не приведя законченный код индикатора.Спасибо всем за помощь. Не сомневаюсь,что не совсем хорошо,но я ещё только начинающий. ;****************************************** ;Автор: * ;Дата :10/10/2013 * ;Имя файла:indADC.asm * ;Для AVR : ATmega8A,в корпусе DIP28 * ;Тактовая частота:3.686 Мгц. * ;Исследование АЦП. Индикатор на * ;светодиодах.Прерывание .Однократный * ;режим преобразования АЦП. * ;****************************************** .include "m8Adef.inc" ;Файл определений для ATmega8A .list ;Включение листинга .def temp = r16 ;Временный регистр .def leder = r19 ;Регистр индикации .def temp1 = r20 ;**** Описание макроса ******************** .macro caseADC ldi temp1,high(@2) cpi zL,low(@2) cpc zH,temp1 brlo t@0 ldi leder,@1 out PORTD,leder t@0: .endm ;****Векторы прерываний ******************* .org $0 ;Установка текущего адреса на ноль по "RESET" rjmp init ;Переход на начало программы .org $00E ;Вектор прерывания АЦП rjmp adca ;преобразование завершено ; ;****Модуль инициализации****************** init: ldi temp,low(RAMEND) ;Установка указателя стека out SPL,temp ;на последнюю ldi temp,high(RAMEND) ;ячейку out SPH,temp ;ОЗУ ldi temp,0b11111111 ;Порт PD на вывод out DDRD,temp ;используем выводы PD0...PD7 out PORTD,temp ;Погасим светодиоды на PD0...PD7 clr temp ;Аналоговые входы порта PC out DDRC,temp ;на выводе PC0 "сидит" канал ADC0 out PORTC,temp ;отключаем подтягивающие резисторы ;****Инициализация АЦП ********************* ldi temp,0b10001101 ;ADEN=1,ADIE=1,Fadc=Fclk/32,ADFR=0(режим однократного преобразования) out ADCSRA,temp ;Fadc=115 кГц при Fclk=3,69 МГц ldi temp,0b01000000 ;Выбираем канал ADC0 по выводу PC0 out ADMUX,temp ;Опорное напряжение AVCC=VCC равно напр.питания 5 вольт,ADLAR=0 (выравнивание по правому) sei ;Разрешение прерываний sbi ADCSRA,ADSC ;Запуск преобразования loop: rjmp loop ;Цикл ожидания прерываний ;****Обработка прерывания от АЦП ********** adca: in zL,ADCL ; in zH,ADCH ; cbi ADCSRA,ADIE ;Запрет прерывания от АЦП ldi temp1,high(128) cpi zL,low(128) cpc zH,temp1 brlo t0 ldi leder,0b11111110 out PORTD,leder rjmp t1 t0: ldi leder,0b11111111 out PORTD,leder t1: caseADC 2,0b11111100,256 caseADC 3,0b11111000,384 caseADC 4,0b11110000,512 caseADC 5,0b11100000,640 caseADC 6,0b11000000,768 caseADC 7,0b10000000,896 caseADC 8,0b00000000,1020 sbi ADCSRA,ADIE ;Разрешение прерывания от АЦП sbi ADCSRA,ADSC ;Пуск преобразования reti
  13. Ну а если предыдущие преобразования установили ADIF в лог.1 , а преобразование происходящее в настоящий момент ещё не закончено и сброса ADIF не происходило то в ADIF будет лог.1.Наверно будет так.
  14. Вот если преобразование завершено то прочитав 4бит ADCSRA там будет лог.1 ,далее я записываю в этот бит лог.1 -значит этот бит я сбрасываю и уже следующей командой прочитав этот бит то там будет лог.0 и завершение следующего преобразования установит в лог.1 этот бит(бит ADIF , 4 бит. регистра ADCSRA).Мне непонятно-вроде я записываю лог.1 ,а считываю оттуда лог.0
  15. Хотел бы уточнить по флагу ADIF регистра ADCSRA.Вот если сбросить ADIF -запишу лог.1 в 4 бит регистра ADCSRA и когда буду читать этот же бит следующей командой то будет считан уже лог.0-(будем считать ,что преобразование ещё не завершено).Правильны ли мои рассуждения ? Зараннее всем благодарен.
×
×
  • Создать...