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

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

В том-то и дело, что если в корпус установить плату, то микросхема никакими кульбитами не влезет. Между стоек тем более и поперёк тоже.DiGiCat писал(а):Так места еще сколько. Плата вставляется между контактами разъема и если микросхема помещается, то все значит войдет .
В крайнем случае можно мешающие стойки подрезать немного и корпус потом склеить\ стянуть пластиковыми стяжками\ скрепить изоляцией, скотчем и т.д. - на выбор.
ЗЫ. Можно без корпуса в конце концов, так ли он там прям... провода только к плате закрепить желательно.
Остаётся сделать вывод - в тех условиях, которые поставил DataLife (да думаю, не он один - я, например, тоже):
1. Поместить схему программатора на плату
2. И одновременно в LPT-корпус на болтах
3. С DIP-буферной микросхемой
миссия невыполнима (а кто выполнит - тому нобелевская премия
Выходов, точнее компромиссов, немного:
1. Найти корпус на защёлках, или широкий
2. Срезать стойки и склеить корпус
3. Использовать навесной монтаж
4. Не использовать корпус
5. Попытать счастья с SMD-микрухой
6. Может, ещё есть варианты.
Всё это, с моей точки зрения, является извращением, хотя и допустимым. 1, 3, 4 и 5 уже демонстрировались - так что можно сделать выбор. И вообще, пора закругляться и идти в соответствующую тему.
Synergetik, огромное спасибо за подведение итогов!
И напоследок:
Навесной монтаж не катит, так как сделать программатор я хотел не "для себя", а для др. человека, который мне его "заказал". Не очень было бы ему приятно увидеть паутину проводов... ИМХО.
Плата от DiGiCat - опять же в корпусе на защёлках, а его нет. Да и у меня получше есть плата для такого корпуса.
Вопрос, думаю, следует считать исчерпанным.
Всем спасибо, кто откликнулся на проблему.
И напоследок:
Навесной монтаж не катит, так как сделать программатор я хотел не "для себя", а для др. человека, который мне его "заказал". Не очень было бы ему приятно увидеть паутину проводов... ИМХО.
Плата от DiGiCat - опять же в корпусе на защёлках, а его нет. Да и у меня получше есть плата для такого корпуса.
Вопрос, думаю, следует считать исчерпанным.
Всем спасибо, кто откликнулся на проблему.
Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного.
Всем привет, Помогите разобратса пытаюсь отладить програму вот етой штукой 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
- Реклама
Господа, доброго времени суток!
Я тут малость подзапутался в разборе одного когда для 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) ?????
Большое спасибо!
Ну чтобы разобраться в этом коде надо всего навсего открыть ДШ и почитать про 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. считывание результата
все
ОК. Понял. Ушел пытаться разобраться. Спасибо. Если не пойму - обращусь.
UPDATE:
значится я все еще не понимаю что такое return(ADCW);
Что за ADCW? В даташите нету. Я догадываюсь что это результат преобразования.... Но почему в даташите ничего нет? В коде ошибка исключена - он реально пашет....
UPDATE:
значится я все еще не понимаю что такое return(ADCW);
Что за ADCW? В даташите нету. Я догадываюсь что это результат преобразования.... Но почему в даташите ничего нет? В коде ошибка исключена - он реально пашет....
в мк результат преобразования хранится в 2х регистрах ADCH:ADCL т.е. составляют слово, по всей видимости для обработки и хранения в программе была описана 2х байтовая переменная ADCW-=MindHunteR=- писал(а):ОК. Понял. Ушел пытаться разобраться. Спасибо. Если не пойму - обращусь.
UPDATE:
значится я все еще не понимаю что такое return(ADCW);
Что за ADCW? В даташите нету. Я догадываюсь что это результат преобразования.... Но почему в даташите ничего нет? В коде ошибка исключена - он реально пашет....
Привет всем котам. Так как я только новичек в МК и ИК хочу спросить, мне нужно принимать ИК сигнал с частотой намного ниже чем 30кГц (Намереваюсь использовать датчик TSOP4830), так как частота генерации МК 128кГц то от начала подачи импульса на ИК диод и до следующей подачи такого же импульса проходит достаточно много времени (происходит проверка присутствия импульса). Так вот в чем вопрос, какая минимальная частота принимаемая этим датчиком?
ЗЫ. МК - ATtiny13
ЗЫ. МК - ATtiny13
Немного нервов и девайс готов
Cтранно это на самом деле, потому что я пересмотрел программу 20 раз, и нигде не видел там ничего подобного.GP1 писал(а): в мк результат преобразования хранится в 2х регистрах ADCH:ADCL т.е. составляют слово, по всей видимости для обработки и хранения в программе была описана 2х байтовая переменная ADCW
Ну да ладно - разберусь.
У меня еще вопросец. Если я правильно понял, то подключив мп к СОМ порту через ТТЛ преобразователь и врубив UART например вот так:
Код: Выделить всё
UCSRB=(1 << TXEN);
UBRRL=(F_CPU / (BAUD_RATE * 16L) - 1);Это вот так вот, по умному, компилятор в AVRGcc все это дело обустраивает?
- Сообщения: 459
- Зарегистрирован: Вс июн 01, 2008 12:16:38
Смотря какой слип. Если idle, то из него по-моему любое прерывание выводит, а если более энергосберегающий, то не любое. В частности почти из всех режимов выводят асинхронные прерывания (timer2 в режиме внешнего тактирования, внешние прерывания по низкому уровню и вроде еще некоторые). Короче даташит Вам в помощь, смотрите раздел Power management или что-то типа того.Vergilium писал(а):Доброго времени суток. Подскажите каким способом лучше вывести МК из режима sleep. Мне нужно чтобы при открытии двери срабатывал переключатель и МК выходил из спящего режима. И если можно то привести пример на асме. Заранее спасибо.
Пример на асме (как впрочем и на С) мне лень, может кто-то другой сподобится.
Чтобы усыпить нужно предварительно выставить биты режима и разрешения спячки. Например для 2313 в регистре MCUCR 4ой и 6ый бит отвечают за режим, а 5ый за разрешение спячки. Т.е. для режима PowerDown + спячка разрешена это будет MCUCR=0x30Vergilium писал(а):Да какие режимы я разобрался, а вот практически как реализовать. Я намереваюсь использовать Power Down и внешнее прерывание для вывода из спячки. Мне бы кодик так в пару строчек как усыпить и разбудить. Заранее спс.
Если бит разрешения спячки выставлен - то после команды sleep микропроцессор будет засыпать. Соответственно по внешнему прерыванию он буде просыпаться...
Вот мой код. подскажите что не так:
.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
Немного нервов и девайс готов
такой код вообще работать не должен, я не говорю уже о структуре, хотябы тот факт что у вас куча вызовов RCALL и ни одного возврата RET
инструкция rjmp INT0 расположена вообще непонятно где, хотя под нее забит определенный адрес
первой командой должна быть команда rjmp start
в общем работатать в таком виде однозначно не будет.
инструкция rjmp INT0 расположена вообще непонятно где, хотя под нее забит определенный адрес
первой командой должна быть команда rjmp start
в общем работатать в таком виде однозначно не будет.



