В том-то и дело, что это LPT-корпус на защёлках (который довольно трудно найти), а у DataLife - на болтах - вот туда плату невероятно сложно собрать - приходится извращаться.DiGiCat писал(а):Вот проблемы то.. Фото не важное и не "свежее", но понять можно.![]()
Мелкие вопросы по МК и ПЛИС.
- Synergetik
- Встал на лапы
- Сообщения: 117
- Зарегистрирован: Чт фев 28, 2008 23:54:35
- Откуда: Воскресенск, МО
- Контактная информация:
- Реклама
Так места еще сколько. Плата вставляется между контактами разъема и если микросхема помещается, то все значит войдет .
В крайнем случае можно мешающие стойки подрезать немного и корпус потом склеить\ стянуть пластиковыми стяжками\ скрепить изоляцией, скотчем и т.д. - на выбор.
ЗЫ. Можно без корпуса в конце концов, так ли он там прям обязательно - плата достаточно жестко закрепленна ... провода только к плате закрепить желательно.

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

- Synergetik
- Встал на лапы
- Сообщения: 117
- Зарегистрирован: Чт фев 28, 2008 23:54:35
- Откуда: Воскресенск, МО
- Контактная информация:
В том-то и дело, что если в корпус установить плату, то микросхема никакими кульбитами не влезет. Между стоек тем более и поперёк тоже.DiGiCat писал(а):Так места еще сколько. Плата вставляется между контактами разъема и если микросхема помещается, то все значит войдет .
В крайнем случае можно мешающие стойки подрезать немного и корпус потом склеить\ стянуть пластиковыми стяжками\ скрепить изоляцией, скотчем и т.д. - на выбор.
ЗЫ. Можно без корпуса в конце концов, так ли он там прям... провода только к плате закрепить желательно.
Остаётся сделать вывод - в тех условиях, которые поставил DataLife (да думаю, не он один - я, например, тоже):
1. Поместить схему программатора на плату
2. И одновременно в LPT-корпус на болтах
3. С DIP-буферной микросхемой
миссия невыполнима (а кто выполнит - тому нобелевская премия
Выходов, точнее компромиссов, немного:
1. Найти корпус на защёлках, или широкий
2. Срезать стойки и склеить корпус
3. Использовать навесной монтаж
4. Не использовать корпус
5. Попытать счастья с SMD-микрухой
6. Может, ещё есть варианты.
Всё это, с моей точки зрения, является извращением, хотя и допустимым. 1, 3, 4 и 5 уже демонстрировались - так что можно сделать выбор. И вообще, пора закругляться и идти в соответствующую тему.
Synergetik, огромное спасибо за подведение итогов!
И напоследок:
Навесной монтаж не катит, так как сделать программатор я хотел не "для себя", а для др. человека, который мне его "заказал". Не очень было бы ему приятно увидеть паутину проводов... ИМХО.
Плата от DiGiCat - опять же в корпусе на защёлках, а его нет. Да и у меня получше есть плата для такого корпуса.
Вопрос, думаю, следует считать исчерпанным.
Всем спасибо, кто откликнулся на проблему.
И напоследок:
Навесной монтаж не катит, так как сделать программатор я хотел не "для себя", а для др. человека, который мне его "заказал". Не очень было бы ему приятно увидеть паутину проводов... ИМХО.
Плата от DiGiCat - опять же в корпусе на защёлках, а его нет. Да и у меня получше есть плата для такого корпуса.
Вопрос, думаю, следует считать исчерпанным.
Всем спасибо, кто откликнулся на проблему.
Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного.
- *Denis*
- Первый раз сказал Мяу!
- Сообщения: 29
- Зарегистрирован: Пн мар 23, 2009 19:35:08
- Откуда: Хмельницкий
Всем привет, Помогите разобратса пытаюсь отладить програму вот етой штукой http://de7bugger.narod.ru/index_usb.html но ничего неполучаетса
хотя шет стирает без проблем , чип использую 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
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
- Реклама
- -=MindHunteR=-
- Открыл глаза
- Сообщения: 62
- Зарегистрирован: Пн мар 23, 2009 16:20:56
- Откуда: From the Middle of Nowhere
- Контактная информация:
Господа, доброго времени суток!
Я тут малость подзапутался в разборе одного когда для MEGA8-AI.
Цель - измерить высокую температуру с помощью измерения падения напряжения на диоде в зависомости от его температуры (зависимость линейная).
(К считываемой прогой ноге микропроцессора подключен диод на массу и параллельно ему резистор на +5 вольт.)
Собственно считываение занимается вот такой набор комманд:
и потом отправляется вот сюда:
Вторая функция простая математика - все ясно.
А вот чего происходит в первой? Я почему то думал что ноги микропроца понимают только логический 0 и лог. 1. А тут блин как то прощупывается, насколько я понимаю, точное напряжение...
Пожалуйста, если не трудно, расскажите как можно подробнее, что за дела там творятся? что за ADMUX = channel | _BV(REFS0) | _BV(REFS1) и ADCSRA |= _BV(ADSC) ?????
Большое спасибо!
Я тут малость подзапутался в разборе одного когда для 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
- Откуда: Россия, Волгоград
- Контактная информация:
Ну чтобы разобраться в этом коде надо всего навсего открыть ДШ и почитать про ADC.-=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); }
1. выбор канала и установка Vref
2. собственно запуск преобразования
3. ожидание окончания процесса
4. считывание результата
все
- -=MindHunteR=-
- Открыл глаза
- Сообщения: 62
- Зарегистрирован: Пн мар 23, 2009 16:20:56
- Откуда: From the Middle of Nowhere
- Контактная информация:
- GP1
- Поставщик валерьянки для Кота
- Сообщения: 2401
- Зарегистрирован: Пт май 23, 2008 19:32:22
- Откуда: Россия, Волгоград
- Контактная информация:
в мк результат преобразования хранится в 2х регистрах ADCH:ADCL т.е. составляют слово, по всей видимости для обработки и хранения в программе была описана 2х байтовая переменная ADCW-=MindHunteR=- писал(а):ОК. Понял. Ушел пытаться разобраться. Спасибо. Если не пойму - обращусь.
UPDATE:
значится я все еще не понимаю что такое return(ADCW);
Что за ADCW? В даташите нету. Я догадываюсь что это результат преобразования.... Но почему в даташите ничего нет? В коде ошибка исключена - он реально пашет....
- Vergilium
- Грызет канифоль
- Сообщения: 260
- Зарегистрирован: Ср фев 13, 2008 14:41:32
- Откуда: Украина, Николаев
Привет всем котам. Так как я только новичек в МК и ИК хочу спросить, мне нужно принимать ИК сигнал с частотой намного ниже чем 30кГц (Намереваюсь использовать датчик TSOP4830), так как частота генерации МК 128кГц то от начала подачи импульса на ИК диод и до следующей подачи такого же импульса проходит достаточно много времени (происходит проверка присутствия импульса). Так вот в чем вопрос, какая минимальная частота принимаемая этим датчиком?
ЗЫ. МК - ATtiny13
ЗЫ. МК - ATtiny13
Немного нервов и девайс готов
- -=MindHunteR=-
- Открыл глаза
- Сообщения: 62
- Зарегистрирован: Пн мар 23, 2009 16:20:56
- Откуда: From the Middle of Nowhere
- Контактная информация:
Cтранно это на самом деле, потому что я пересмотрел программу 20 раз, и нигде не видел там ничего подобного.GP1 писал(а): в мк результат преобразования хранится в 2х регистрах ADCH:ADCL т.е. составляют слово, по всей видимости для обработки и хранения в программе была описана 2х байтовая переменная ADCW
Ну да ладно - разберусь.
У меня еще вопросец. Если я правильно понял, то подключив мп к СОМ порту через ТТЛ преобразователь и врубив UART например вот так:
Код: Выделить всё
UCSRB=(1 << TXEN);
UBRRL=(F_CPU / (BAUD_RATE * 16L) - 1);Это вот так вот, по умному, компилятор в AVRGcc все это дело обустраивает?
Смотря какой слип. Если idle, то из него по-моему любое прерывание выводит, а если более энергосберегающий, то не любое. В частности почти из всех режимов выводят асинхронные прерывания (timer2 в режиме внешнего тактирования, внешние прерывания по низкому уровню и вроде еще некоторые). Короче даташит Вам в помощь, смотрите раздел Power management или что-то типа того.Vergilium писал(а):Доброго времени суток. Подскажите каким способом лучше вывести МК из режима sleep. Мне нужно чтобы при открытии двери срабатывал переключатель и МК выходил из спящего режима. И если можно то привести пример на асме. Заранее спасибо.
Пример на асме (как впрочем и на С) мне лень, может кто-то другой сподобится.
Чтобы усыпить нужно предварительно выставить биты режима и разрешения спячки. Например для 2313 в регистре MCUCR 4ой и 6ый бит отвечают за режим, а 5ый за разрешение спячки. Т.е. для режима PowerDown + спячка разрешена это будет MCUCR=0x30Vergilium писал(а):Да какие режимы я разобрался, а вот практически как реализовать. Я намереваюсь использовать Power Down и внешнее прерывание для вывода из спячки. Мне бы кодик так в пару строчек как усыпить и разбудить. Заранее спс.
Если бит разрешения спячки выставлен - то после команды sleep микропроцессор будет засыпать. Соответственно по внешнему прерыванию он буде просыпаться...
- Vergilium
- Грызет канифоль
- Сообщения: 260
- Зарегистрирован: Ср фев 13, 2008 14:41:32
- Откуда: Украина, Николаев
Вот мой код. подскажите что не так:
.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
.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
- Откуда: Россия, Волгоград
- Контактная информация:
такой код вообще работать не должен, я не говорю уже о структуре, хотябы тот факт что у вас куча вызовов RCALL и ни одного возврата RET
инструкция rjmp INT0 расположена вообще непонятно где, хотя под нее забит определенный адрес
первой командой должна быть команда rjmp start
в общем работатать в таком виде однозначно не будет.
инструкция rjmp INT0 расположена вообще непонятно где, хотя под нее забит определенный адрес
первой командой должна быть команда rjmp start
в общем работатать в таком виде однозначно не будет.



