Мелкие вопросы по МК и ПЛИС.

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
Synergetik
Встал на лапы
Сообщения: 117
Зарегистрирован: Чт фев 28, 2008 23:54:35
Откуда: Воскресенск, МО
Контактная информация:

Сообщение Synergetik »

DiGiCat писал(а):Вот проблемы то.. Фото не важное и не "свежее", но понять можно. :)

В том-то и дело, что это LPT-корпус на защёлках (который довольно трудно найти), а у DataLife - на болтах - вот туда плату невероятно сложно собрать - приходится извращаться.
Аватара пользователя
DiGiCat
Друг Кота
Сообщения: 4793
Зарегистрирован: Пт июл 11, 2008 09:42:35
Откуда: Made in USSR

Сообщение DiGiCat »

Так места еще сколько. Плата вставляется между контактами разъема и если микросхема помещается, то все значит войдет .
В крайнем случае можно мешающие стойки подрезать немного и корпус потом склеить\ стянуть пластиковыми стяжками\ скрепить изоляцией, скотчем и т.д. - на выбор.
ЗЫ. Можно без корпуса в конце концов, так ли он там прям обязательно - плата достаточно жестко закрепленна ... провода только к плате закрепить желательно.
Изображение Изображение
Аватара пользователя
Synergetik
Встал на лапы
Сообщения: 117
Зарегистрирован: Чт фев 28, 2008 23:54:35
Откуда: Воскресенск, МО
Контактная информация:

Сообщение Synergetik »

DiGiCat писал(а):Так места еще сколько. Плата вставляется между контактами разъема и если микросхема помещается, то все значит войдет .
В крайнем случае можно мешающие стойки подрезать немного и корпус потом склеить\ стянуть пластиковыми стяжками\ скрепить изоляцией, скотчем и т.д. - на выбор.
ЗЫ. Можно без корпуса в конце концов, так ли он там прям... провода только к плате закрепить желательно.

В том-то и дело, что если в корпус установить плату, то микросхема никакими кульбитами не влезет. Между стоек тем более и поперёк тоже.

Остаётся сделать вывод - в тех условиях, которые поставил DataLife (да думаю, не он один - я, например, тоже):
1. Поместить схему программатора на плату
2. И одновременно в LPT-корпус на болтах
3. С DIP-буферной микросхемой

миссия невыполнима (а кто выполнит - тому нобелевская премия :) )

Выходов, точнее компромиссов, немного:
1. Найти корпус на защёлках, или широкий
2. Срезать стойки и склеить корпус
3. Использовать навесной монтаж
4. Не использовать корпус
5. Попытать счастья с SMD-микрухой
6. Может, ещё есть варианты.

Всё это, с моей точки зрения, является извращением, хотя и допустимым. 1, 3, 4 и 5 уже демонстрировались - так что можно сделать выбор. И вообще, пора закругляться и идти в соответствующую тему.
Аватара пользователя
DataLife
Вымогатель припоя
Сообщения: 601
Зарегистрирован: Пт фев 13, 2009 20:58:13
Откуда: Донецк

Сообщение DataLife »

Synergetik, огромное спасибо за подведение итогов!
И напоследок:
Навесной монтаж не катит, так как сделать программатор я хотел не "для себя", а для др. человека, который мне его "заказал". Не очень было бы ему приятно увидеть паутину проводов... ИМХО.
Плата от DiGiCat - опять же в корпусе на защёлках, а его нет. Да и у меня получше есть плата для такого корпуса.

Вопрос, думаю, следует считать исчерпанным.
Всем спасибо, кто откликнулся на проблему.
Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного.
Аватара пользователя
*Denis*
Первый раз сказал Мяу!
Сообщения: 29
Зарегистрирован: Пн мар 23, 2009 19:35:08
Откуда: Хмельницкий

Сообщение *Denis* »

Всем привет, Помогите разобратса пытаюсь отладить програму вот етой штукой http://de7bugger.narod.ru/index_usb.html но ничего неполучаетса :cry: хотя шет стирает без проблем , чип использую 16f628A выдает вот такую ошыбку

Entering Debug Mode
...Programming GOTO 0x00 command
...Restoring users code
ICD0083: Debug: Unable to enter debug mode. Please double click this message for more information.
MPLAB ICD 2 ready for next operation
Аватара пользователя
*Denis*
Первый раз сказал Мяу!
Сообщения: 29
Зарегистрирован: Пн мар 23, 2009 19:35:08
Откуда: Хмельницкий

Сообщение *Denis* »

может нужно кварц прицепить ?
Аватара пользователя
-=MindHunteR=-
Открыл глаза
Сообщения: 62
Зарегистрирован: Пн мар 23, 2009 16:20:56
Откуда: From the Middle of Nowhere
Контактная информация:

Сообщение -=MindHunteR=- »

Господа, доброго времени суток!
Я тут малость подзапутался в разборе одного когда для MEGA8-AI.
Цель - измерить высокую температуру с помощью измерения падения напряжения на диоде в зависомости от его температуры (зависимость линейная).
(К считываемой прогой ноге микропроцессора подключен диод на массу и параллельно ему резистор на +5 вольт.)

Собственно считываение занимается вот такой набор комманд:

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

int getadc(uint8_t channel) {
  // Select pin ADC0 using MUX
  ADMUX = channel | _BV(REFS0) | _BV(REFS1);

  //Start conversion
  ADCSRA |= _BV(ADSC);

  // wait until converstion completed
  while (ADCSRA & _BV(ADSC) ) {}

    // get converted value
  return(ADCW);
}


и потом отправляется вот сюда:

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

int convert2degree(int value) {
  static const float c1=19.5;
  static const float v1=275;  //ADC-Wert=264 @ 20°C

  static const float c2=202;
  static const float v2=154;  //ADC-Wert=165 @ 202°C


  float m=((c1-c2)/(v1-v2));
  return((int)((m*(float)value)+(-m*v1)+c1));
  //return((int)((-m*v1)+c1));
}


Вторая функция простая математика - все ясно.
А вот чего происходит в первой? Я почему то думал что ноги микропроца понимают только логический 0 и лог. 1. А тут блин как то прощупывается, насколько я понимаю, точное напряжение...

Пожалуйста, если не трудно, расскажите как можно подробнее, что за дела там творятся? что за ADMUX = channel | _BV(REFS0) | _BV(REFS1) и ADCSRA |= _BV(ADSC) ?????

Большое спасибо!
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

Сообщение GP1 »

-=MindHunteR=- писал(а):

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

int getadc(uint8_t channel) {
  // Select pin ADC0 using MUX
  ADMUX = channel | _BV(REFS0) | _BV(REFS1);

  //Start conversion
  ADCSRA |= _BV(ADSC);

  // wait until converstion completed
  while (ADCSRA & _BV(ADSC) ) {}

    // get converted value
  return(ADCW);
}



Ну чтобы разобраться в этом коде надо всего навсего открыть ДШ и почитать про ADC.
1. выбор канала и установка Vref
2. собственно запуск преобразования
3. ожидание окончания процесса
4. считывание результата

все :))
Чем дальше, тем больше становлюсь занудой...
Изображение
Аватара пользователя
-=MindHunteR=-
Открыл глаза
Сообщения: 62
Зарегистрирован: Пн мар 23, 2009 16:20:56
Откуда: From the Middle of Nowhere
Контактная информация:

Сообщение -=MindHunteR=- »

ОК. Понял. Ушел пытаться разобраться. Спасибо. Если не пойму - обращусь.

UPDATE:
значится я все еще не понимаю что такое return(ADCW);
Что за ADCW? В даташите нету. Я догадываюсь что это результат преобразования.... Но почему в даташите ничего нет? В коде ошибка исключена - он реально пашет....
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

Сообщение GP1 »

-=MindHunteR=- писал(а):ОК. Понял. Ушел пытаться разобраться. Спасибо. Если не пойму - обращусь.

UPDATE:
значится я все еще не понимаю что такое return(ADCW);
Что за ADCW? В даташите нету. Я догадываюсь что это результат преобразования.... Но почему в даташите ничего нет? В коде ошибка исключена - он реально пашет....

в мк результат преобразования хранится в 2х регистрах ADCH:ADCL т.е. составляют слово, по всей видимости для обработки и хранения в программе была описана 2х байтовая переменная ADCW
Чем дальше, тем больше становлюсь занудой...
Изображение
Аватара пользователя
Vergilium
Грызет канифоль
Сообщения: 260
Зарегистрирован: Ср фев 13, 2008 14:41:32
Откуда: Украина, Николаев

Сообщение Vergilium »

Привет всем котам. Так как я только новичек в МК и ИК хочу спросить, мне нужно принимать ИК сигнал с частотой намного ниже чем 30кГц (Намереваюсь использовать датчик TSOP4830), так как частота генерации МК 128кГц то от начала подачи импульса на ИК диод и до следующей подачи такого же импульса проходит достаточно много времени (происходит проверка присутствия импульса). Так вот в чем вопрос, какая минимальная частота принимаемая этим датчиком?

ЗЫ. МК - ATtiny13
Немного нервов и девайс готов
Аватара пользователя
-=MindHunteR=-
Открыл глаза
Сообщения: 62
Зарегистрирован: Пн мар 23, 2009 16:20:56
Откуда: From the Middle of Nowhere
Контактная информация:

Сообщение -=MindHunteR=- »

GP1 писал(а):в мк результат преобразования хранится в 2х регистрах ADCH:ADCL т.е. составляют слово, по всей видимости для обработки и хранения в программе была описана 2х байтовая переменная ADCW


Cтранно это на самом деле, потому что я пересмотрел программу 20 раз, и нигде не видел там ничего подобного.
Ну да ладно - разберусь.

У меня еще вопросец. Если я правильно понял, то подключив мп к СОМ порту через ТТЛ преобразователь и врубив UART например вот так:

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

  UCSRB=(1 << TXEN);
  UBRRL=(F_CPU / (BAUD_RATE * 16L) - 1);


можно командой printf печатать сообщения прямо в окно терминала на компе?

Это вот так вот, по умному, компилятор в AVRGcc все это дело обустраивает?
Аватара пользователя
Vergilium
Грызет канифоль
Сообщения: 260
Зарегистрирован: Ср фев 13, 2008 14:41:32
Откуда: Украина, Николаев

Сообщение Vergilium »

Доброго времени суток. Подскажите каким способом лучше вывести МК из режима sleep. Мне нужно чтобы при открытии двери срабатывал переключатель и МК выходил из спящего режима. И если можно то привести пример на асме. Заранее спасибо.
Немного нервов и девайс готов
smac
Мучитель микросхем
Сообщения: 459
Зарегистрирован: Вс июн 01, 2008 12:16:38

Сообщение smac »

Vergilium писал(а):Доброго времени суток. Подскажите каким способом лучше вывести МК из режима sleep. Мне нужно чтобы при открытии двери срабатывал переключатель и МК выходил из спящего режима. И если можно то привести пример на асме. Заранее спасибо.

Смотря какой слип. Если idle, то из него по-моему любое прерывание выводит, а если более энергосберегающий, то не любое. В частности почти из всех режимов выводят асинхронные прерывания (timer2 в режиме внешнего тактирования, внешние прерывания по низкому уровню и вроде еще некоторые). Короче даташит Вам в помощь, смотрите раздел Power management или что-то типа того.
Пример на асме (как впрочем и на С) мне лень, может кто-то другой сподобится.
Аватара пользователя
Vergilium
Грызет канифоль
Сообщения: 260
Зарегистрирован: Ср фев 13, 2008 14:41:32
Откуда: Украина, Николаев

Сообщение Vergilium »

Да какие режимы я разобрался, а вот практически как реализовать. Я намереваюсь использовать Power Down и внешнее прерывание для вывода из спячки. Мне бы кодик так в пару строчек как усыпить и разбудить. Заранее спс.
Немного нервов и девайс готов
Telek
Встал на лапы
Сообщения: 115
Зарегистрирован: Пт май 23, 2008 23:59:37
Откуда: Москва

Сообщение Telek »

Vergilium писал(а):Да какие режимы я разобрался, а вот практически как реализовать. Я намереваюсь использовать Power Down и внешнее прерывание для вывода из спячки. Мне бы кодик так в пару строчек как усыпить и разбудить. Заранее спс.

Чтобы усыпить нужно предварительно выставить биты режима и разрешения спячки. Например для 2313 в регистре MCUCR 4ой и 6ый бит отвечают за режим, а 5ый за разрешение спячки. Т.е. для режима PowerDown + спячка разрешена это будет MCUCR=0x30
Если бит разрешения спячки выставлен - то после команды sleep микропроцессор будет засыпать. Соответственно по внешнему прерыванию он буде просыпаться...
Аватара пользователя
Vergilium
Грызет канифоль
Сообщения: 260
Зарегистрирован: Ср фев 13, 2008 14:41:32
Откуда: Украина, Николаев

Сообщение Vergilium »

И после этого будет исполнятся команда следующая? Так?
Немного нервов и девайс готов
Telek
Встал на лапы
Сообщения: 115
Зарегистрирован: Пт май 23, 2008 23:59:37
Откуда: Москва

Сообщение Telek »

Vergilium писал(а):И после этого будет исполнятся команда следующая? Так?

Т.к. проснется по прерыванию - то уйдет в прерывание. Потом выйдя из него будет следующую команду которая после sleep выполнять.
Аватара пользователя
Vergilium
Грызет канифоль
Сообщения: 260
Зарегистрирован: Ср фев 13, 2008 14:41:32
Откуда: Украина, Николаев

Сообщение Vergilium »

Вот мой код. подскажите что не так:

.include "tn13def.inc"

ldi R16,0b111100 ;настраиваем порт В
out DDRB,R16

cbi ADCSRA,7 ;Отключаем АЦП
cbi ADCSRB,6 ;Отключаем компаратор

test:
sbi PORTB,3
sbic PINB,0
rcall err_test
rcall ok_test

ok_test:
cbi PORTB,3
cbi PORTB,5
rjmp main

err_test:
cbi PORTB,3
sbi PORTB,5
rjmp test

.cseg

rjmp INT_0

INT_0:

main:
cli ;запрещаем прерывания

Door_det:
sbis PINB,1
rcall Door_open
rcall Door_close

Door_open:
ldi r16,0b011100
out PORTB,r16
sbic PINB,0
rcall sens_sel
rcall sens_ansel

sens_sel:
cbi PORTB,3
cbi PORTB,2
sbis PINB,1
rcall sens_sel
door_cls:
sbic PINB,1
rcall door_cls
ldi r16,0b011100
out PORTB,r16
sensor:
sbi PORTB,3
sbic PINB,0
rcall sens_sl
cbi PORTB,3
rjmp sensor

sens_sl:
clr r16
out PORTB,r16
rjmp main

sens_ansel:
cbi PORTB,3
rjmp Door_det

Door_close:
sei ; разрешаем прерывания
ldi r16,0b00110000 ; настраиваем режим sleep
out MCUCR,r16
sleep ;спать
rjmp main
Немного нервов и девайс готов
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

Сообщение GP1 »

такой код вообще работать не должен, я не говорю уже о структуре, хотябы тот факт что у вас куча вызовов RCALL и ни одного возврата RET
инструкция rjmp INT0 расположена вообще непонятно где, хотя под нее забит определенный адрес
первой командой должна быть команда rjmp start
в общем работатать в таком виде однозначно не будет.
Чем дальше, тем больше становлюсь занудой...
Изображение
Ответить

Вернуться в «Разные вопросы по МК»