Свежие обсуждения
Микроконтроллеры

Ликбез по программированию PIC

1 84 99

Подскажите, как написать программу музыкального звонка на ассемблер для PIC16f84?
Помигать лампочками у меня получается, а вот музыку зашить не могу. В Интернете
много всяких музыкальных редакторов для процессоров , а как написать программу для
начинающего не нашёл. Готовые программы музыкальных звонков на ассемблере которые нашёл в Интернете , в MPLAB v.5.70 при компилировании выдают кучу ошибок.
Вероятно что-то делаю не так, вот и хочу научиться написать сам.

 

Посмотрите проект "музыкальной елки" на сайте picmaniac'а. www.pic16.nm.ru

 

АК, где можно скачать книгу, которую Вы упомнили. "Однокристальные микроконтроллеры Mikrochip PIC16C8X», RIGA, ORMIX, 1997."?
Заранее благодарен за ответ

 

Мне нужен не просто музыкальный звонок. Мне понравилась разработка А.Бывших. Контроллер видео-домофона с музыкальным звонком. http://home.tula.net/a_biv/index.html Но кое что хотел доработать под себя. Но там исходник написан на С а я его совсем не знаю, решил что-то подобное написать на ассемблере. Основная часть получилась а вот музыка нет. Идея такая, две видеокамеры расположены на разных входах в здания . На каждом входе кнопки звонка. Вся эта система работает на телевизор POLAR .Надо при нажатии кнопки 1 включалась камера 1 и звучала мелодия 1 подался код RC-5 включения телевизора и переключения на видео по ИК каналу . Через 30сек.просмотра подался код RC-5 на выключения телевизора и всей системы. Соответственно при нажатии кнопки 2 включилась камера 2 мелодия 2 подался код RC-5 включения телевизора и переключения на видео по ИК каналу и тд.
Вот что у меня получилось, особенно не пинайте, программа пока сырая
это моя первая программа. Вернее её кусок.

 

Не могу втавить файл.

 

Shakhtyor: АК, где можно скачать книгу, которую Вы упомнили. "Однокристальные микроконтроллеры Mikrochip PIC16C8X», RIGA, ORMIX, 1997."?
Вот выложил, файл 1,65 МБ:
http://rapidshare.com/files/25200818/PIC16C84.djvu.html
Сообщите о работоспособности ссылки, когда скачаете.
--
rubilnik: Не могу втавить файл.
Не более 150 КБ.

 

Здравствуйте. Пользователи MPLAB, подскажите, в нем есть функция оценки неиспользованной памяти программ ROM и RAM? (Например, как в mikroBasic, "использовано ROM - 90%", "использовано RAM - 12%"). Где галочку поставить или окошко открыть?
А то пишешь прогу, мысли все подходят и подходят, а может уже и места нет в выбранном МCPU для реализации идей

 

AlexAlcoa: функция оценки неиспользованной памяти программ
MPASM в конце файла листинга (*.lst) выдаёт статистику. Примено так:
Program Memory Words Used: 461
Program Memory Words Free: 563

 

SAK: MPASM в конце файла листинга (*.lst) выдаёт статистику Спасибо, про листинг в курсе Хотелось чтобы MPLAB сам после компиляции выдавал типа отчета или сообщения

 

Добрый день, эксперты!

Прошу помощи! Я никогда раньше не сталкивался с программированием микроконтроллеров. И теперь, после многих часов мучений, не выдержал, и решил обратиться к вам .

Проблема состоит в следующем: в качестве мануала по программированию использую книгу Шпака "Программирование на языке С для AVR и РIС микроконтроллеров". На странице 222 есть пример "Индикация уровня напряжения на аналоговом входе". Рассчитан на контроллер PIC18F458.

Пытаюсь переделать его под свои нужды (PIC18F442): на плате (DEMO BOARD 2 от MicroChip) есть потенциометр. Пытаюсь получить хоть какой-то признак, что напряжение меняется, если его покрутить... Т.е., по моему разумению, следующая программа должна зажигать LEDы от B0 до B3 при изменении напряжения соответственно от 0 до 1.5 В... а если напряжение больше - должны гореть все. Но, видимо, я неправильно понял что-то: постоянно горят все LEDы (видимо, напряжение > 1.5 В, как ни крути потенциометр...).

#include <18F442.h> // в начальной версии здесь был 18F458
#device ADC=10 // 10-разрядное преобразование
#use delay(clock=10000000)
#fuses HS, NOWDT

#byte ADCON0 = 0x1F // регистр управления АЦП
int n;

#int AD // обработка прерывания от АЦП
AD_isr()
{
n = read_adc() / 102; // в результате n принимает
// значения 0...8 (соотв. уровням
// напряжения 0...4 В)
ADCON0 |= 4; // установка регистра GO в
// разряде управления => снова запуск АЦП
}

void main()
{
setup_adc_ports( ALL_ANALOG ); // внутр. источник напряжения
setup_adc( ADC_CLOCK_DIV_32 );
enable_interrupts( INT_AD );
enable_interrupts( global );
set_adc_channel( 0 );
ADCON0 |= 4; // начинаем АЦП

while( 1 )
{
... // потушить все LEDы (B0...B3)
switch( n )
{
case 0: ... // зажечь LED В0
case 1: ... // зажечь LED В1
case 2: ... // зажечь LED В2
case 3: ... // зажечь LED В3
default: ... // зажечь все LEDы (B0...B3)
}
}
}

Есть версия: величина напряжения читается не не с потенциометра? Буду очень признателен любым соображениям по этому поводу... Прошу прощения, если вопрос уровня дет. сада

Всего доброго,
dm