Устройство для перепрошивки памяти в картриджах принтера
-
VectorWarrior
- Первый раз сказал Мяу!
- Сообщения: 29
- Зарегистрирован: Ср янв 14, 2009 10:32:24
- kybertech
- Нашел транзистор. Понюхал.
- Сообщения: 170
- Зарегистрирован: Пт окт 31, 2008 02:54:28
- Откуда: Украина
- Контактная информация:
VectorWarrior писал(а):вот только не разобрался с джостиком как МК анализирует какая кнопка нажата и какой должен был шаг между напряжением с ножек ведь в цивре там всего два сигнела 1 и 0 ... я чет недоганяю
Кнопки ?
Это смотря как они у тебя подключены к МК.
Я к примеру делаю обычно если кнопка нажата то на лапе МК появляется "0".
- kybertech
- Нашел транзистор. Понюхал.
- Сообщения: 170
- Зарегистрирован: Пт окт 31, 2008 02:54:28
- Откуда: Украина
- Контактная информация:
kybertech писал(а):VectorWarrior писал(а):вот только не разобрался с джостиком как МК анализирует какая кнопка нажата и какой должен был шаг между напряжением с ножек ведь в цивре там всего два сигнела 1 и 0 ... я чет недоганяю
Кнопки ?
Это смотря как они у тебя подключены к МК.
Я к примеру делаю обычно если кнопка нажата то на лапе МК появляется "0".
Вот если на джостике как в примере показан на картинке то там на землю замыкается, только нужно будет подтягивать лапы контроллера на через резистор на "+", что бы в состоянии когда кнопка не нажата на лапе контроллера небыл логичсекий "ноль".
-
VectorWarrior
- Первый раз сказал Мяу!
- Сообщения: 29
- Зарегистрирован: Ср янв 14, 2009 10:32:24
kybertech писал(а):Вот если на джостике как в примере показан на картинке то там на землю замыкается, только нужно будет подтягивать лапы контроллера на через резистор на "+", что бы в состоянии когда кнопка не нажата на лапе контроллера небыл логичсекий "ноль".
они все сидят на одной лапе 19-ADC6 ...
Spider писал(а):Резисторы R7-R11 нужно подобрать по "вкусу", так чтобы результирующий делитель у каждой кнопки давал своё напряжение с достаточным зазором
допустим что для кнопки 1 соответсвует напряжение 3v для 2-3.5v; 3-4v; 4-4.5v; 5-5v соответсвенно но любое напряжени будет означать лог 1 для МК и как заставить его понимать какая кнопка включена ..... вот допустип если посадить RC таймер в чтоб давал преравания в нано секундах ... то ещё можно потом расчитать и записать в программу авто определения но думаю есть более простой способ.... или цеплять к МК на ножки 22-26 (22-ADC7 23-PC0 24-PC1 25-PC2 26-PC3) и ими уже управлять ....может так только ет все догадки
Теоретиков много но вот практики ценяться выше!!!
/\__/\
=^_^=
/\__/\
=^_^=
- kybertech
- Нашел транзистор. Понюхал.
- Сообщения: 170
- Зарегистрирован: Пт окт 31, 2008 02:54:28
- Откуда: Украина
- Контактная информация:
VectorWarrior писал(а):kybertech писал(а):Вот если на джостике как в примере показан на картинке то там на землю замыкается, только нужно будет подтягивать лапы контроллера на через резистор на "+", что бы в состоянии когда кнопка не нажата на лапе контроллера небыл логичсекий "ноль".
они все сидят на одной лапе 19-ADC6 ...Spider писал(а):Резисторы R7-R11 нужно подобрать по "вкусу", так чтобы результирующий делитель у каждой кнопки давал своё напряжение с достаточным зазором
допустим что для кнопки 1 соответсвует напряжение 3v для 2-3.5v; 3-4v; 4-4.5v; 5-5v соответсвенно но любое напряжени будет означать лог 1 для МК и как заставить его понимать какая кнопка включена ..... вот допустип если посадить RC таймер в чтоб давал преравания в нано секундах ... то ещё можно потом расчитать и записать в программу авто определения но думаю есть более простой способ.... или цеплять к МК на ножки 22-26 (22-ADC7 23-PC0 24-PC1 25-PC2 26-PC3) и ими уже управлять ....может так только ет все догадки
если в контроллере активировано ADC программно то он может различать напрядение от 0 до 5 вольт
-
VectorWarrior
- Первый раз сказал Мяу!
- Сообщения: 29
- Зарегистрирован: Ср янв 14, 2009 10:32:24
-
VectorWarrior
- Первый раз сказал Мяу!
- Сообщения: 29
- Зарегистрирован: Ср янв 14, 2009 10:32:24
- kybertech
- Нашел транзистор. Понюхал.
- Сообщения: 170
- Зарегистрирован: Пт окт 31, 2008 02:54:28
- Откуда: Украина
- Контактная информация:
..................
//Функция чтения ADC (параметром является номер входа адц)
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}
void main()
{
int volt = 0;
...
Это инициализация ADC
ACSR=0x80;
SFIOR=0x00;
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x8D;
...
while (1)
{
............
volt = read_adc(0);//Читаеш значение на порту ADC 0
...........
//а потом распознавай значение и выполняй
определённые операции
};
}
Но это не значит что оно тебе покажет напряжение на лапе от 0 до 5 вольт. В таком виде оно тебе будет выводить от 0 до 1024. Получается приравниваються значения 0 равен 0, а 1024 равно 5 вольтам.
То есть если на лапе будет 4 вольта то тебе контроллер покажет 819 .
а Даташит лучше почитай .
//Функция чтения ADC (параметром является номер входа адц)
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}
void main()
{
int volt = 0;
...
Это инициализация ADC
ACSR=0x80;
SFIOR=0x00;
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x8D;
...
while (1)
{
............
volt = read_adc(0);//Читаеш значение на порту ADC 0
...........
//а потом распознавай значение и выполняй
определённые операции
};
}
Но это не значит что оно тебе покажет напряжение на лапе от 0 до 5 вольт. В таком виде оно тебе будет выводить от 0 до 1024. Получается приравниваються значения 0 равен 0, а 1024 равно 5 вольтам.
То есть если на лапе будет 4 вольта то тебе контроллер покажет 819 .
а Даташит лучше почитай .
-
VectorWarrior
- Первый раз сказал Мяу!
- Сообщения: 29
- Зарегистрирован: Ср янв 14, 2009 10:32:24
- Spider
- Опытный кот
- Сообщения: 732
- Зарегистрирован: Чт дек 29, 2005 07:29:25
- Откуда: Омск
- Контактная информация:
kybertech писал(а):VectorWarrior писал(а):kybertech писал(а):Вот если на джостике как в примере показан на картинке то там на землю замыкается, только нужно будет подтягивать лапы контроллера на через резистор на "+", что бы в состоянии когда кнопка не нажата на лапе контроллера небыл логичсекий "ноль".
они все сидят на одной лапе 19-ADC6 ...Spider писал(а):Резисторы R7-R11 нужно подобрать по "вкусу", так чтобы результирующий делитель у каждой кнопки давал своё напряжение с достаточным зазором
допустим что для кнопки 1 соответсвует напряжение 3v для 2-3.5v; 3-4v; 4-4.5v; 5-5v соответсвенно но любое напряжени будет означать лог 1 для МК и как заставить его понимать какая кнопка включена ..... вот допустип если посадить RC таймер в чтоб давал преравания в нано секундах ... то ещё можно потом расчитать и записать в программу авто определения но думаю есть более простой способ.... или цеплять к МК на ножки 22-26 (22-ADC7 23-PC0 24-PC1 25-PC2 26-PC3) и ими уже управлять ....может так только ет все догадки
если в контроллере активировано ADC программно то он может различать напрядение от 0 до 5 вольт
Я вообще предпологал что резисторы будут вибираться так, что напряжение будет в диапозоне от 0 до 2.56 в таком случае мы не зависим от напряжения питания. А внутри проца тупо снимаем напряжение с ножки и сверяем его с "таблицей" в которой приведены соотношения. Всё просто. По сути у нас 5 кнопок и 2.56 диапозон, итого по 0,512 вольта на кнопку, делим на 2 на зазор и получаем что первая кнопка имеет напряжение 0,256 - 0,384, вторая 0,768-0,896
, третья 1,28-1,408, четвёртая 1,792-1,92, пятая 2,304 - 2,432. Соответвенно всё что ниже 0,256 и выше 2,432 есть неопределённое состояние и идёт лесом как ненажатая клавиша.
Таким образом для таких напряжений можно выбрать следующие номиналы резисторов (ряд E12, кроме 9k1 - E24):
R6 - 91k
R7 - 39k
R8 - 22k
R9 - 15k
R10 - 9k1
R11 - 10k
Ещё бы я повесил параллельно R11 конденсатор на 500p-1n, дабы хоть как-то сгладить дребезг.
Ну это псевдо самый простой способ.
Можно так же кнопки перекинуть на параллельный интерфейс дисплея и снимать их от туда. А как - показано на схемах других авторов.
-
VectorWarrior
- Первый раз сказал Мяу!
- Сообщения: 29
- Зарегистрирован: Ср янв 14, 2009 10:32:24
седня был в радиодеталях половина купил половину заказал должны привести в понедельник .... а кстати не подскажите какой LCD лучше использовать??? я тут покопался нашел в пределах 200 рубликов (LCD 16x2 WH1602D ) далее уже по ходу сборки будут вопросы там и отпишусь
и ещё теории
а можно прицепить ещё паралельно к выходам SDA и SCL память AT24c256 для хранения разных прошивок (накопал что таким девайсом можно прошивать до 12 разных катриджей ....) чтоб сразу разводку делать на неё в плате???? заранее спасибо ....
и ещё теории
а можно прицепить ещё паралельно к выходам SDA и SCL память AT24c256 для хранения разных прошивок (накопал что таким девайсом можно прошивать до 12 разных катриджей ....) чтоб сразу разводку делать на неё в плате???? заранее спасибо ....
Теоретиков много но вот практики ценяться выше!!!
/\__/\
=^_^=
/\__/\
=^_^=
-
VectorWarrior
- Первый раз сказал Мяу!
- Сообщения: 29
- Зарегистрирован: Ср янв 14, 2009 10:32:24
-
VectorWarrior
- Первый раз сказал Мяу!
- Сообщения: 29
- Зарегистрирован: Ср янв 14, 2009 10:32:24
-
VectorWarrior
- Первый раз сказал Мяу!
- Сообщения: 29
- Зарегистрирован: Ср янв 14, 2009 10:32:24
вот схема ... через паре дней выложу свою собственную со всеми наминаломи вот только про катушку с етим кондюком не знаю....
- Вложения
-
- Reseter.png
- (23.3 КБ) 411 скачиваний
Теоретиков много но вот практики ценяться выше!!!
/\__/\
=^_^=
/\__/\
=^_^=