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

Изменение Прошивки Мк


Гость Александр

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

Гость Александр

здравствуйте, решил собрать велокомпьютерпо этой схеме: http://cxem.net/mc/mc154.php Там 4 свободных порта на контроллере, я хочу прицепить кнопку к 7 выводу, и запрограммировать так: При длительном нажатии (2сек) включались габариты (лог.1 на 2 ноге), при повторном таком же нажатии отключались, а при кратковременном нажатии загоралась фара (лог 1 на 3 ноге) и так же кнопкой отключалась. И еще, если возможно прицепить к 15 ноге термодатчик ds18b20 и при длительном нажатии (более4сек) переводить устройство в режим измерения уличной температуры, а при простое велика более минуты (отсутствие сигнала с геркона) отключать дисплей и освещение для экономии аккумулятора. Помогите пожалуйста, очень нужно. Или подскажите как это сделать Заранее спасибо

Вот сам первоначальный код написанный в bascom avr :

'Прошивка для велокомпьютера на МК Atmel Attiny 2313
'Версия велокомпьютера: 1.0
'Операционная система велокомпьютера: OS11 V2.2 (VeloComputer)
'Тактовая частота МК велокомпьютера: 4МГц (внешний кварц)
'Дисплей: HD44780 16*1
'Велокомпьютер тестировался на велосипеде Keltt VCT26-90
'Длинна колеса (по умолчанию): 208см
'Разработчик: Яковлев Александр Вячеславович
'E-mail: haker.by@mail.ru
'Сайт: http:\\os11.ucoz.ru
'Беларусь, Витебск 06.08.2012
$regfile = "attiny2313.dat"
$crystal = 12000000
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.1 , Rs = Portb.0
Config Lcd = 16 * 1a
Const Coleso = 1.09										 '190см
Config Pind.2 = Input
Config Pind.4 = Input									 'OK
Config Pind.5 = Input									 'CANCEL
Config Pind.6 = Input
Config Int0 = Falling
On Int0 Speedok
Enable Interrupts
Enable Int0
Dim Temptotal As Byte
Dim Total As Long
Dim All As Long
Dim Speed As Word
Dim Flag As Bit
'Dim S As Bit
Enable Interrupts
Enable Timer1
Config Timer1 = Timer , Prescale = 64
On Timer1 Incrt:
Start Timer1
$eeprom
Alldata:
Data 17%
$data
Readeeprom All , Alldata
Cls
Lcd "Starting OS11..."
Sound Portb.2 , 300 , 200
Wait 3
Cls
Lcd "Ver:2.2 (VeloC)"
Wait 1
Cls
Lcd "Yakovlev A. V."
Wait 3
Cls
Cursor Off
Do
Disable Interrupts
Locate 2 , 5
Lcd "km/h"
Locate 2 , 3
If Speed < 10 Then Lcd Speed ; " "
If Speed > 9 Then Lcd Speed
Locate 1 , 1
Lcd Total ; "m"
Enable Interrupts
'If Flag = 0 Then
'If Pind.2 = 0 Then
'Total = Total + Coleso
'All = All + Coleso
'Temptotal = Temptotal + Coleso
'Flag = 1
'End If
'End If
'If Pind.2 = 1 Then Flag = 0
If Pind.6 = 0 Then
Cls
Lcd "All:" ; All ; "m"
Sound Portb.2 , 150 , 90
Waitms 100
Sound Portb.2 , 150 , 90
Waitms 100
Sound Portb.2 , 150 , 90
Wait 2
Cls
End If
If Pind.4 = 0 Then
Cls
Lcd "All:" ; All ; "m Saved!"
Sound Portb.2 , 500 , 100
Writeeeprom All , Alldata
Wait 2
Cls
End If
If Pind.5 = 0 Then
Cls
Lcd "Total clear!"
Sound Portb.2 , 500 , 250
Wait 1
Total = 0
Cls
End If
'If S = 0 Then
'If Speed = 0 Then
'Sound Portb.2 , 500 , 250
'Waitms 100
'Sound Portb.2 , 500 , 250
'Waitms 100
'Sound Portb.2 , 500 , 250
'S = 1
'End If
'End If
'If Speed <> 0 Then S = 0
Loop
Speedok:
Total = Total + Coleso
All = All + Coleso
Temptotal = Temptotal + Coleso
Waitms 50
Gifr = 64
Return
Incrt:
Speed = 0
Speed = Temptotal
Temptotal = 0
Speed = Speed * 3600
Speed = Speed / 1000
Return

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

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

...Или подскажите как это сделать...

1. Открываешь в браузере поисковик, и вбиваешь в строку ввода "уроки по ____ для мк". Заместь черточек - тот язык программирования, с которым сталкивался/будешь на нем кодить для МК.

2. Постигаешь основы/изощренные премудрости языка, пишешь что-то свое (например, аналог программы выше).

3. И вот тут, если не получается, со своей прогой идешь сюда и тебе помогут.

ЗЫ: Не в обиду, но за тебя скорее всего никто ничего делать не будет... Хотя, исключения встречаются.

И пусть судьба не справедлива, Жизнь игра - играй красиво!

И что б не кикнули тебя, Не злить Админа, юзверя!

Люблю "спасибки" :)

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

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

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

    • У меня до саба ещё дело не дошло, только сейчас думаю купить амп на полкиловатта, но так можно, при условии, что на входе будет моно, и будет срез частот
    • Про флаг Т: если он не используется в основной программе, а у меня он постоянно в деле. для меня меня отложенная обработка прерывания обычное дело, нужно лишь правильно расставить приоритеты частей программы. И обычное дело: выставляешь частоту задающего генератора побольше, делишь его до получения частоты 1000 Гц каким либо таймером, загоняешь в прерывание с флагом. затем закольцовываешь основную программу с проверкой флага прерывания от таймера 1000Гц. загоняешь программу в Sleep. Получаешь кольцо обработки с образцовым интервалом в 1 мс. После любого прерывания проверяешь флаг от таймера, если он, то сбрасываешь флаг и начинаешь перебирать подпрограммы обработки индикаторов, клавиатуры, и тд. и тп, подпрограммы обработки флагов и др. После окончания обработки всех подпрограмм возвращаешься к Sleep. И так по кольцу. Если происходит прерывание не от таймера, программа выходит из Sleep, проверяется флаг от таймера, если не он (а это не он) обратно к Sleep. В большенстве программ использую этот алгоритм.  
    • @korsaj Сегодня попробовал сделать как ты посоветовал. Получился следующий код. #define F_CPU 7372800UL #define BAUND 9600L #define UBRRL_value (F_CPU/(BAUND*16))-1 #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include <stdlib.h> void init_pin(void); #define C_PC0 (~PINC&(1<<PC0)) #define C_PC1 (~PINC&(1<<PC1)) #define LED_1_ON() PORTD|=(1<<PD2) #define LED_1_OFF() PORTD&=~(1<<PD2) #define LED_2_ON() PORTD|=(1<<PD3) #define LED_2_OFF() PORTD&=~(1<<PD3) #define FLAG_END_RX (1<<3) #define FLAG_ERR_RX (1<<4) #define BUF_SIZE 20 char rx_buf[BUF_SIZE]; char buf_index = 0; volatile start=1, flags; char b; ISR(USART_RXC_vect) { b=UDR; if(!(flags & FLAG_END_RX)) { rx_buf[buf_index]=UDR; if(rx_buf[buf_index] == 0x0D) { flags |= FLAG_END_RX; return; } buf_index++; if(buf_index >= BUF_SIZE) { buf_index = 0; flags |= FLAG_ERR_RX; } } } void init_UART() { UBRRL = UBRRL_value; UBRRH = UBRRL_value>>8; UCSRB|=(1<<TXEN); UCSRB|=(1<<RXEN); UCSRC|=((1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1)); UCSRB|=(1<<RXCIE); sei(); flags = 0; } void send_UART(char value) { while(!(UCSRA&(1<<UDRE))); UDR=value; } int main(void) { init_pin(); init_UART(); while(1) { if (start==1) { _delay_ms(500); send_UART('O'); send_UART('K'); send_UART('!'); send_UART(0x0D); send_UART(0x0A); _delay_ms(10); start=0; } if (b == '0') { LED_1_ON(); LED_2_OFF(); send_UART('N'); send_UART('+'); send_UART('0'); send_UART('0'); send_UART(0x0D); send_UART(0x0A); _delay_ms(10); b=4; } if (b == '1') { LED_1_OFF(); LED_2_ON(); send_UART('N'); send_UART('+'); send_UART('0'); send_UART('1'); send_UART(0x0D); send_UART(0x0A); _delay_ms(10); b=4; } if (b == '2') { LED_1_ON(); LED_2_ON(); send_UART('N'); send_UART('+'); send_UART('0'); send_UART('2'); send_UART(0x0D); send_UART(0x0A); _delay_ms(10); b=4; } if (b == '3') { LED_1_OFF(); LED_2_OFF(); send_UART('N'); send_UART('+'); send_UART('0'); send_UART('3'); send_UART(0x0D); send_UART(0x0A); _delay_ms(10); b=4; } if (C_PC0) { send_UART('P'); send_UART('C'); send_UART('0'); send_UART(0x0D); send_UART(0x0A); _delay_ms(250); } if (C_PC1) { send_UART('P'); send_UART('C'); send_UART('1'); send_UART(0x0D); send_UART(0x0A); _delay_ms(250); } } } void init_pin(void) { DDRC = 0b00000000; PORTC = 0b11111111; DDRD |= ((1<<2)|(1<<3)); PORTD &=~ ((1<<2)|(1<<3)); } Ну как сказать всё работает, но вот меня очень интересует приём команд на саму ATMEGA16. Он так и работает только с цифрами. Более ничего корректно принять не получается даже используя таблицу ascii. А мне нужно будет принимать команды и посложней чем просто буквенно - цифровые. Потому как возвращаясь к командам самого плеера там в этих командах хранятся различные данные. Вот примерно так это всё выглядит. AT+QM \ r \ n Запрос режима работы [0: Bluetooth], [1: MP3] AT+M1 \ r \ n Номер текущего файла AT+M2 \ r \ n Общее количество звуковых файлов AT+MD \ r \ n Источник музыки USB или SD Card AT+MT \ r \ n Общее время воспроизведения текущего файла AT+MK \ r \ n Время воспроизведения текущего файла AT+MP \ r \ n Текущее состояние плеера [0]Стоп, [1]Воспроизведение, [2]Пауза К примеру при отправке команды AT+M1 \ r \ n в ответ мы получим M1 + 000002 \ r \ n при этом здесь может быть любое число в hex формате. Мне же нужно каким то образом принять эти данные и обработать их соответствующим образом. Но при этом и нужно учитывать так же что плеер может сам отправить эти данные по началу воспроизведения трека. Вот в этом сейчас и стоит основная задача. Чего я и пытаюсь получить в итоге.
    • Ну тогда дорога к сименсу в гости - они вам какой-нибудь Desigo CC или даже Siematic предложат, тыщ за 10 долларов. Ну и ещё тыщ 5 надо будет отдать за контроллеры и их конфигурирование.   А если попроще - то можно к отечественным MasterSCADA обратиться, либо к WiredBoard - у них не совсем SCADA система, но нормальные контроллеры, довольно просто настраиваются и можно графическую оболочку рисовать.
    • тогда вы имеете то, что имеете, и никак от этого не избавиться. Хоть святой водой окропите. "Или трусы или крестик" (с) Нагрузки у вас немаленькие. Вы же с нуля переделываете, снова некуда ? Понятие LowESR очень неконкретное. Сколько вешать в граммах ? пустая трата времени
    • Да все это туфта, выеденного яйца не стоит. В общем чушь собачья. На мониторе тему уже сплавили в мусорку, а здесь треп еще будет на 10 страницах. Все камеры, их у него было три, исправные. Записывают отлично. А дальше вся проблема в этом. Особо интересно - монтажник видео.
  • Похожий контент

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