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

Круиз-контроль для Mitsubishi Grandis Atmega8535


Гость еще один max

Рекомендуемые сообщения

Хм..Раньше было не так, был общий лимит и чистить надо было периодически..Есть этот же вариант на обычной рассыпухе. А чем SMD то всех так пугает? И проще и компактнее..

Ссылка на комментарий
Поделиться на другие сайты

  • Ответов 218
  • Создана
  • Последний ответ

Топ авторов темы

Топ авторов темы

Изображения в теме

Есть этот же вариант на обычной рассыпухе. А чем SMD то всех так пугает? И проще и компактнее..

Глазки и ручки уже не те :angry:

Ссылка на комментарий
Поделиться на другие сайты

:smile: :smile: :smile: Вова ДР там отмечает :smile: Я тоже плату жду, так что не ты один...Ему там вроде разводить заново её надо, просил потерпеть.

Изменено пользователем mikky
Ссылка на комментарий
Поделиться на другие сайты

У Вовы ДР?! Тогда поздравляю, Володя! Пусть твои возможности совпадают с твоими желаниями, а желания будут безграничны! :smile:

Тогда ждем-с :smile:

Ссылка на комментарий
Поделиться на другие сайты

"Вася пришел... Я думал, что ты не придешь после вчерашнего" (С) Образцов, "Необыкновенный концерт"

ДР это всегда испытание для тостуемого.

Вова, заранее приношу извинения, я сегодня дома последний день, завтра дней на 5 поеду к друзьям в Джубгу. Поэтому до этого времени вряд ли что успею сделать.

Отчитаюсь что успел сделать во время твоего отсутствия:

Скачал Proteus, CodeVisionAVR, VMLAB. Установил на 2 машины - одна домашняя под ХР, на работе под VirtualBox (у меня Линукс на работе) тоже под ХР. Скачано все с rutracker.org. Встало на "ура".

Начал читать статьи на нашем сайте по программированию контроллеров. Вова, не кидай камни - начал осваивать Си, ибо Ассемблер надо вспоминать, привязываться к архитектуре. А тут такая замануха - переменные, массивы, функции, библиотеки. Не удержался, короче...

CodeVisionAVR - рулезная прога! Быстро и все понятно. Короче - пишу в ней на Си, компилирую и получаю файл *.hex - готовая прошивка для МК.

Отступление. Всю жизнь мечтал изучить Си. Но только взяв какой-нить учебник через 3-4 листа понимал что я=лошара, и это все для избранных. Надо заметить, что также у меня начиналось с консольным сервером на Линуксе. А почитав статьи и просто скопировав некоторые простенькие программы, понял, что все вполне доступно. Си - рулез! Конечно на Ассемблере код короче и программа быстрее, но написание и отладка мне ближе на Си :smile:

Запустил Протеус. Какая классная прога, просто песня! Даже если просто рисовать схемы - есть все элементы, прога русифицируется, эмулирует работу устройства, куча измерительных приборов. Залил прошивку в виртуальный МК, обвесил чем надо - и смотри, правильно написал или нет. Исправить ошибку - 3 минуты. Тем более CodeVisionAVR при компиляции все ошибки подсказывает.

К делу. Решил начинать помаленьку с того, что понятно. Схема - МК, джойстик, два 7-ми сегментника и 4 светодиода. Потом объясню, зачем:

post-1142-1272609827_thumb.jpg

Что делал - снял данные с АЦП, передал на 7-ми сегментник. Записал коды, занес в таблицу:

post-1142-1272610159_thumb.jpg

В таблице напряжения не в милливольтах (так вначале было), а в вольтах*10, для сранимых значений в диаграмме.

Для чего - варьируя резистор R4, добился равномерного распределения напряжений на входе ADC. Получилось 380 Ом, подобрал по ряду наиболее близкое - 390. Внес в схему. Добавил вольтметр, проверил - все совпадает.

Далее - ввел массив с границами диапазонов распознавания. Написал проверочный блок (вложенный цикл if...else), вывожу данные на светодиоды для наглядности. Получилось! какая кнопка нажата - определяет.

Да, забыл - все делается по таймеру, основное тело пока пустое:

 

#include <mega8535.h>
#include <delay.h>

#define ADC_VREF_TYPE 0x20

// Read the 8 most significant bits
// of the AD conversion result
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;
}
// Declare your global variables here
unsigned char p;
unsigned char limit[4]={26,82,144,216};
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Place your code here
p= read_adc(0);
PORTB= p;
if(p<limit[0]) PORTC=0b00000001;
else {
if(p<limit[1]) PORTC=0b00000010;
else {
if(p<limit[2]) PORTC=0b00000100;
else{
if(p<limit[3]) PORTC=0b00001000;
else PORTC=0b00010000;
}
}
}
}

void main(void)
{

DDRA=0x00;

PORTB=0x00;
DDRB=0xFF;

PORTC=0x00;
DDRC=0xFF;

PORTD=0x00;
DDRD=0x00;

TCCR0=0x05;
TCNT0=0x00;
OCR0=0x00;

TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

MCUCR=0x00;
MCUCSR=0x00;

TIMSK=0x01;

ACSR=0x80;
SFIOR=0x00;

// ADC initialization
// ADC Clock frequency: 500,000 kHz
// ADC Voltage Reference: AREF pin

ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x84;
SFIOR&=0xEF;

// Global enable interrupts
#asm("sei")

while (1)
  {
  // Place your code here

  };
}

Удалил ненужные комменты из листинга для сокращения, а то простыня какая огромная.

Обработка данных с датчика педали акселератора будет примерно такая же, только там 2 датчика. Думаю за время опроса изменения будут минимальные, тем более что я хочу сделать циклы везде на ADC - на джойстике защититься от случайных срабатываний, а на педали вычислить среднее значение за 3-4 промера.

Пока не понимаю, как будет организован ЦАП. Посмотрел по ножкам: вроде вывода DAC нигде нет. Читаю сейчас про ШИМ, никогда не пользовал, но похоже придется именно так. А не хотелось бы, там внешние элементы - кондёры и резюки, какая нах тут точность...

Альтернатива - внешний ЦАП на мс. Тоже хорошее решение.

Ткните в нужном направлении, плиз!

Вова, а если я на макетке все это соберу? Ну какая разница? Она у тебя практически макетная за исключением кварца, питания, кнопок и выхода на программатор. Хотя попробовать ЛУТ надо...

Приеду числа 5-го примерно.

Ребята, по ЦАП сегодня напишите мне что-нибудь! Буду на отдыхе в паузах между поездками и купанием думать. Хочу ноут с собой взять и туда все это поставить. Хотя вряд ли, жена ругаться будет...

Изменено пользователем еще один max
Ссылка на комментарий
Поделиться на другие сайты

Вопрос в том, как лучше организовать ЦАП:

1. На резисторной матрице

2. На внешней мс (по сути то же, просто в корпусе резюки прецизионные и пара оперов стоит)

3. С помощью ШИМ с одной ноги МК

4. Внутренним ЦАП. По информации с сайти "Чип и Дип" ЦАП там есть! Он где? Как его включить?

Четвертый самый лучший вариант. Но он есть или его нет?

Самый простой первый, но напруга плавать будет, а для педали это не есть правильно. Должна держать на одном уровне.

Ссылка на комментарий
Поделиться на другие сайты

Напруга плавать не будет если гистерезис задать в программе, а усложнять не стоит, не те у него задачи. По шиту, щас позырим..Чёто нету там ничего про внутренний ЦАП. Тока про АЦП на порте А...

Изменено пользователем mikky
Ссылка на комментарий
Поделиться на другие сайты

77 страница Даташита:

Быстрая ШИМ может применяться в управлении напряжением, коррекции (?) и в приложениях ЦАП.

Ну примерно так. Нет тут никакого встроенного ЦАП... Я плакаль :smile:

 

Ждем что скажет аксакал hippo64

Изменено пользователем еще один max
Ссылка на комментарий
Поделиться на другие сайты

Не надо нервничать, четыре разряда резистивного ЦАП тебе за глаза и за уши, к чему там особая точность то? Мало, и восемь поставить можно, там ног целая куча останется. А чего так далеко в даташит залез то? Смотреть нада по архитектуре, а это 3-5 страница...

Изменено пользователем mikky
Ссылка на комментарий
Поделиться на другие сайты

Гость
Эта тема закрыта для публикации ответов.
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...