- •Предисловие
- •Часть 1. Электроника для начинающих
- •Глава 1. Что на плате электронного устройства?
- •Резистор
- •Конденсатор и индуктивность
- •Диод и транзистор
- •Глава 2. Программы и схемы
- •PSIM в Linux
- •Qucs в Linux
- •Операционный усилитель
- •Цифровая микросхема
- •Глава 3. Путешествие по плате с осциллографом
- •Что такое осциллограф?
- •Что такое сигнал?
- •Что я увидел на плате с помощью осциллографа?
- •Глава 4. Электричество и магнетизм
- •Глава 5. Сигналы или переменный ток на практике
- •Разные законы изменения переменного тока
- •Генерация сигналов
- •Использование сигналов
- •Глава 6. С чего начать свой первый проект?
- •Усилитель мощности
- •Светофор
- •Блок питания
- •Глава 7. Усилитель
- •Включение транзистора с общей базой
- •Включение транзистора с общим коллектором
- •Включение транзистора с общим эмиттером
- •Определение зависимости тока базы от напряжения
- •Частотные характеристики усилителя
- •Стоп, стоп, стоп!
- •Глава 8. Бабахать или нет – вот в чем вопрос
- •Разговоры, разговоры
- •Проект «Громкоговоритель»
- •Глава 9. Теплоотвод
- •Разные режимы работы оконечных каскадов
- •Тепло. Что с ним делать?
- •Глава 10. Сигналы, немного больше
- •Прямоугольные импульсы
- •Получение импульсов некоторых видов из простых сигналов
- •Немного о сигналах и линиях
- •Больше об амплитудной модуляции
- •Другие преобразования напряжений
- •Глава 11. Немного больше об усилителях
- •Усилители в радиоприемнике
- •Предварительный усилитель НЧ
- •Снижение шумов и автоматическая регулировка
- •Глава 12. Автоматика, и зачем она нужна
- •Обогреватель-автомат или простые устройства автоматики
- •Автоматическая нянька для рассеянных
- •Глава 13. Один интересный преобразователь
- •Преобразователи постоянного напряжения в переменное
- •Разные типы современных преобразователей
- •Проблемы симуляции электрических схем
- •Глава 14. Как считает домашний компьютер
- •Пример расчета максимальной выходной мощности
- •Пример расчета схемы стабилизатора
- •Примеры соотношений в транзисторных схемах
- •Программы для более сложных расчетов
- •Глава 15. Микропроцессор и программирование
- •Галопом по европам
- •Как организована работа процессора
- •Что такое программа?
- •Глава 16. Микроконтроллеры
- •Что нужно для работы с микроконтроллером?
- •Завершение проекта «Светофор»
- •Некоторые особенности работы с программатором
- •Завершение проекта «Автомат для рассеянных»
- •Завершение проекта «Электроника для начинающих»
- •Глава 17. Измерения в электрических цепях
- •Схема коммутатора к осциллографу
- •Схема приставки к мультиметру для измерения L и C
- •Схема регулировки яркости светильника
- •Глава 18. Организация собственной разработки
- •Часть 2. Игра в программирование
- •Глава 1. Поиск печки, от которой танцевать
- •Два берега
- •Первое знакомство с Gambas
- •Компьютер может помочь с программированием
- •Почему Емеля ездил на печи?
- •А можно с этого места поподробнее?
- •Первый блин
- •Глава 2. Бряцая железом
- •Хорошее начало
- •Возвращение
- •Отладка в gpsim
- •Глава 3. У камелька
- •Начало проекта «Машинистка»
- •Развиваем успех
- •Заметки и пометки «на память»
- •Глава 4. Охота на кентавра
- •Засада в интерфейсе
- •Железное решение
- •Лирическое отступление
- •Грустное завершение рассказа о счетчике
- •Глава 5. Сказка о неудачливом радиолюбителе
- •Возвращение на круги своея
- •Расширение кругов (на воде?)
- •gpsim как зерцало грешника
- •Вялая попытка оправдаться
- •И оргвыводы
- •Глава 6. Сказка о ловком программисте
- •Предварительное рассмотрение проекта «Генератор»
- •Продолжение работы над проектом «Генератор»
- •Завершение
- •Конспекты
- •Gambas дружелюбен к пишущим на VB, но используя Linux
- •Разработка приложений в Gambas
- •Часть 3. Proteus в любительской практике
- •Что такое интегрирующая и дифференцирующая цепь?
- •Почему не выпрямляет диод?
- •Как работает транзистор?
- •Микроконтроллеры и Proteus
- •Как работать с линиями?
- •Помогите найти схему внешнего генератора импульсов 4-8 MHZ (например на 555ЛН1).
- •Собрал одно, собрал другое — не работает. Что делать?
- •Почему я работаю с AVR?
В.Н. Гололобов |
Экскурсия по электронике |
479 |
TRISA = 0x38; TRISB = 0xFA;
RCSTA = 0x90; // Настройка приемника TXSTA = 0x6; // Настройка передатчика
SPBRG = 0x68; // Настройка режима приема-передачи PORTB = 0xFE; // Выключаем драйвер RS485 на передачу PORTA = 0x1; // Тестовая индикация
}
void cmd_count ()
{
COUNT = PORTA;
CREN = 0; // Выключаем прием
PORTB = 0xFF; // Включаем передатчик TXEN = 1; // Включаем передачу
COUNT = COUNT + 0x30; putch(COUNT);
for (i=0;i<5000;i++); // Пауза
PORTB = 0xFA; // Выключаем передатчик TXEN = 0; // Выключаем передачу
CREN = 1; // Включаем прием
}
void main(void) {
init_comms(); // Инициализация модуля
start: CREN =1; // Начинаем работать input = getch();
cmd(); goto start;
}
stc-файл, конечно, почти совпадает по содержанию с тем, что было приведено выше, исключая строку
load s counter_start.cod
где меняется имя cod-файла на относящееся к текущей программе. В остальном все, практически, сохраняется. Включая, что после сброса компьютера, клавишей Reset симулятора, его частота устанавливается «по умолчанию», что мешает правильно понимать ввод-вывод.
Вялая попытка оправдаться
При последней проверке я немного слукавил. Та программа контроллера, которую я использовал совместно с интерфейсом и макетной платой (физической) отличается от тестовой версии наличием двух строк и функция отправки состояния порта А выглядит так:
void cmd_count ()
{
COUNT = PORTA;
CREN = 0; // Выключаем прием
PORTB = 0xFF; // Включаем передатчик TXEN = 1; // Включаем передачу
COUNT = COUNT << 2;
COUNT = COUNT >> 5; COUNT = COUNT + 0x30;
В.Н. Гололобов |
Экскурсия по электронике |
480 |
putch(COUNT);
for (i=0;i<5000;i++); // Пауза
PORTB = 0xFA; // Выключаем передатчик TXEN = 0; // Выключаем передачу
CREN = 1; // Включаем прием
}
На «живой» макетной плате выводы порта соединяются с подтягивающими резисторами. При симуляции в gpsim есть возможность добавить такую «подтяжку», но мне не хотелось морочить голову ни себе, ни вам. Если использовать две удаленные строки, то порта А всегда будет обнулен, что и я и получаю при симуляции, а мне гораздо больше понравилось использовать команду «a» с символом включения индикаторов – числом от 0 до 7, которые затем и получать при чтении состояния порта. Слукавил.
Не вполне мне понятно, почему компилятор SDCC, прекрасно работающий во многих случаях, при чтении состояния порта
COUNT = PORTA;
не желает работать. Это еще одна интересная загадка. К которой добавляется тот факт, что собственно присвоение переменной состояния порта имеет место, как это показывает симуляция в gpsim. Интересно. Пока у меня только одно объяснение, функции чтения и записи в usart взяты мною из примеров для компилятора HI-TECH. Может быть здесь какойто подводный камень?
Нет. Не здесь.
Все получилось проще (во всяком случае, сейчас). Версия, которой я пользовался – это версия 2.6. Появилась новая версия, 2.7.0. Замена версии компилятора устранила проблему. Теперь симуляция проходит точно так же, как и компилятором HI-TECH. Осталось проверить работу с «живой» макетной платой и интерфейсом, да проверить всю связку в другом дистрибутиве Linux (Ubuntu).
Все работает и с другим дистрибутивом, где я заменил версию SDCC на последнюю. Работает и с интерфейсной частью проекта. Лучше не бывает.
Хотя нет, бывает. Очень меня интересовало, почему в Ubuntu программирование из Piklab идет быстрее, а в окне программирования гораздо меньше сообщений, чем я получаю в Fedora 7, основной у меня ОС сегодня? И все оказалось очень просто – сам, как я полагаю, зацепил настройки Piklab, установив на вкладке General вывод всех сообщений об ошибках. Стоило поменять эту опцию на другую, как показано на рисунке ниже, и все стало быстро, как и в Ubuntu.
Сам виноват.
В.Н. Гололобов |
Экскурсия по электронике |
481 |
Рис. 5.19. Установка опции вывода сообщений в Piklab
И оргвыводы
Где можно применить такой подход? Я имею ввиду не борьбу «с ветряными мельницами», а использование микроконтроллера и интерфейса написанного в Gamabas. В первую очередь там, где требуется для наладки или проверки большое количество импульсных сигналов, следующих в определенной последовательности. Конечно, можно, как это делается традиционно, использовать для их получения единственный «физический» генератор импульсов, как тактовый, а затем формировать все остальное, используя схемы задержки, укорачивания и удлинения импульсов и т.д., но мне кажется, что веселый дует «компьютер и микроконтроллер» справятся с подобной задачей лучше, при небольших навыках быстрее, обойдется это дешевле, но, главное, реализация будет много интереснее.
Получив некоторый опыт в работе со всеми необходимыми программами, можно было бы написать программу, которая назвалась бы «Тестер для микросхем». Если на макетную плату рядом с панелькой для микроконтроллера поставить панельку для микросхем, если в микроконтроллер добавить несколько программ обслуживания этих микросхем, а в программу интерфейса добавить команды перехода к этим программам обслуживания микросхем, то что-то из всего этого, видимо, и получится.
Больше пользы эти шаги по созданию проверочного стенда могут принести при проверке цифровых модулей, требующих достаточно большого количества управляющих сигналов. Хотя можно найти и другие применения этому дуэту – программный интерфейс и микроконтроллер, если подумать. Или когда жизнь подскажет.
Итак. Среда программирования Gambas позволяет достаточно легко и быстро создавать интерфейсную часть, которая хорошо справляется с общением по COM-порту между вашими желаниями и возможностями микроконтроллера. Их, этих возможностей у микроконтроллера, великое множество.
Программа Piklab великолепно и без каких-либо проблем работает с программами, написанными на ассемблере (я веду речь только о том контроллере, с которым работал). Но писать программы на ассемблере есть смысл тогда, когда есть интерес к ассемблеру. В противном случае лучше воспользоваться либо компилятором PICC Lite производства HI-
В.Н. Гололобов |
Экскурсия по электронике |
482 |
TECH, или купить его полную версию, либо, что удобнее, использовать компилятор SDCC.
Программа Piklab достаточно уверенно работает с простейшим самодельным программатором JDM Classic, но еще успешнее с покупным и недорогим EXTRA-PIC.
При правильной настройке симулятор gpsim, который работает в Linux, оказывается не менее удобным отладочным средством, чем встроенный симулятор MPLAB.
Чтобы это доказать себе, а только себе и можно что-либо доказать вне рамок формальных наук, чтобы доказать это себе, я опробую еще одно средство, которое есть в gpsim, для чего быстро (как и в прошлый раз) напишу код программы test3 для контроллера PIC16F628A, код даже без файла заголовков.
/* ----------------------------------------------------------------------- |
*/ |
/* Template source file generated by piklab */ |
|
#include <pic16f628a.h> |
|
/* ----------------------------------------------------------------------- |
*/ |
/* Configuration bits: adapt to your setup and needs */ |
|
typedef unsigned int word; |
_MCLRE_ON & |
word at 0x2007 CONFIG = _WDT_ON & _PWRTE_OFF & _RC_OSC_CLKOUT & |
|
_BOREN_ON & _LVP_ON & _DATA_CP_OFF & _CP_OFF; |
|
int i;
void init_comms() // Инициализация модуля
{
CMCON = 0x7; |
// Настройка портов А и В |
TRISA = 0x38; |
|
TRISB = 0xFA; |
// Настройка приемника |
RCSTA = 0x90; |
|
TXSTA = 0x6; |
// Настройка передатчика |
SPBRG = 0x68; |
// Настройка режима приема-передачи |
PORTB = 0xFE; |
// Выключаем драйвер RS485 на передачу |
PORTA = 0x0; |
|
} |
|
void main() {
/* << insert code >> */
start: init_comms(); PORTA = 0x0;
for (i=0;i<100;i++); PORTA = 0x1;
for (i=0;i<100;i++); PORTA = 0x1;
goto start;
}
Если код откомпилировать, запустить gpsim, в котором открыть cod-файл, а затем открыть осциллограф (Windows-Scope), и щелкнуть в его правой части, где появляется окошко для ввода, куда вписать, например, pora0, а после запуска симуляции нажать Enter на клавиатуре (при этом окошко исчезает), то можно наблюдать изменение сигнала на нулевом выводе порта А:
В.Н. Гололобов |
Экскурсия по электронике |
483 |
Рис. 5.20. Осциллограф в отладчике gpsim
По словам автора проекта gpsim это средство общения с микроконтроллерами нуждается в дополнительной работе, и пока только отображает логическое состояние портовых вводоввыводов, но оно уже есть. И, когда будет доработано, возможно будет не хуже того, что в MPLAB. В Linux многое меняется быстро.
