Почитайте тогда про декодер. В зависимости от двоичного кода он выставляет лог. 1 (или 0 в зависимости от типа) на выходе с номером равным значению кода и лог. 0 (соотв. лог. 1) на остальных выводах. Этот сигнал можно использовать для коммутации лампы подключенной к этому выходу. Но наверное лучшим решением при большом числе ламп и их одновременной засветки будет поставить драйвер светодиодов, например что-нибудь типа 24-канального TLC5951 или какой-либо менее навороченный с I2C/SPI интерфейсом, например PCU9656. Они также содержат регулировку яркости по каждому каналу.
Большое спасибо! На озоне книжку заказал, завтра заберу. А вы не знаете, в proteus эти МК есть? у меня по запросу "0851" выдает фирмы philips, atmel, generic
Ser60, а какие еще программаторы, кроме описанных в статье про программатор из Toolstick-ek подходят для прошивки C8051F320? Просто оказалось что достать их в Питере достаточно сложно.
Спасибо, сейчас буду собирать программатор на LPT и контроллер думаю F340 взять, у него ног больше. А те примеры что приведены в вашей статье пойдут с заменой заголовочного файла C8051F380_defs.h на C8051F340_defs.h и USBX_F38X.LIB на USBX_F34X.LIB или надо еще что то изменять? И чем отличаются контроллеры F340-GQ от F340-GQR?
В зависимости от компилятора может потребоваться раскомментить вызов первой функции у меня в программе. Я пользвался Keil и запуск USB clock находится в его start up коде. Согласно ДШ f340-GQR не существует. В любом случае, думаю это несущественно. Дайте знать как получится (или нет) запрограммировать МК.
Еще появился вопрос: на схемах программатора у разъема программирования замкнуты ноги Vio и C2CK через резистор более 4,7 кОм но почему то уже на программируемом устройстве. Зачем? можно же прямо на плате замкнуть, или это надо что бы определить наличие устройства? и еще я правильно понял что C2DAT надо подключить к ноге P2.7 а GND соответственно к земле и все?
Я тоже не вижу смысла в этом резисторе если делать схему с нуля. Вероятное обьяснение - программатор предназначался к использованию с какой-то готовой target board, где резистор подтяжки пина reset уже установлен. Однако, если делать по первой схеме, то в общую точку R1 и R2 надо завести питание 3.3в.
Для программирования F340 к нему надо подключить землю, reset и C2DAT (к выводам 13 и 14, соответственно). Кроме того, надо подключить питание как показано на рис. 8.4 в ДШ.
Мой Вам совет - разоритесь на нормальный программатор для C8051. Контроллеры классные, меня потом не раз вспомните.
Очень мудрое решение. Насчет Toolstick-EK, я думаю их выпуск прекращен из-за выхода в свет серий F37x и F39x пару месяцев назад. Oни разработаны на замену старой серии F30x, МК которой размещен на плате Toolstick-a, и которая уже после новых не столь интересна. Я попробова F39x, впечатления очень положительные. С интересом обнаужил что в этих новых сериях (среди всего прочего) помимо стандартной возможности перенаправить выводы периферии практичеки на любые выводы корпуса, Силлабы поши дальше и заложили возможность менять порядок выводов корпуса на I2C шине (напрямую или крест-накрест). Это очень удобно при разводке плат в радиолюбительских условиях. Такого гибкого коммутатора ресурсов нет ни в одном другом МК. Ну и вообще...
Проблема в том, что у этого проекта очень сжатые сроки: необходимо что бы этот тренажер "работал" (на компьютер выводилось положение кнопок и с него управлялись лампочки) к апрелю. Я вполне адекватно понимаю, что с моим багажом знаний такое на STM32 не осилить. По-этому я и выбрал контроллер, на который уже расписан пример. А из дальнейших проектов у меня пока брежжит впереди велокомпьютер с сенсорным жк дисплеем и кучей функций, и я боюсь что C8051 мне уже может нехватить
Понял. Но и на проект "обычного" велокомпьютера Вам C8051 хватит с огромным запасом, если, конечно, не собираетесь на этом дисплее видео показывать или производить навигацию по GPS или типа того.
Сегодня полез в configuration wizard 2, выбрал там контроллер F340, и нашел, что у него можно настроить только 4 ШИМа, есть ли возможность сделать пятый ШИМ без использования внешних преобразователей? И еще: Вы в вашей статье приводите примеры на C++ а у Гладштейна в той книге, которую Вы мне порекомендовали, разобраны примеры на ассемблере, а я не очень дружу с ним, не могли бы посоветовать, как лучше портировать примеры, которые там даны?
оффтоп:
Спойлера с велокомпьютером Вы почти угадали, я хочу сделать его с сенсорным экраном, возможностью открытия картинок с microSD карты запись картинки с 2х видеокамер и параметров езды, отображение картинки с одной из камер на экран во время движения плюс проигрывание музыки или радио и возможность записывания радиоэфира на карту памяти,
Я полагаю, что Вы не туда посмотрели для конфигурации PWM. Именно, в F340 есть 4 таймера, но в противоположность большинству МК PWM организуется не на них. Помимо таймеров в F340 там есть еще блок PCA с каналами формирования 8- или 16-битной ШИМ PCA0 - PCA4, как раз то, что Вам нужно. Блок PCA4 совмещен с Watchdog таймером, но его можно отключить и появится возможность для генерации ШИМ на 5-м канале.
Строго говоря, у меня в статье софт для МК написан на С, а не на С++. Но скорее всего, Вы и имели в виду С. Однако, куда Вы хотите портировать ассемблерный код из книги? Если в С, то для приведенных там примеров переделки минимальны. Именно, везде для настроек регистров используйте С-шный оператор присваивания "=" вместо команды "mov", и замените условные переходы на "if"-конструкции и циклы, например, на "while"-конструкции. А лучше, изучите АСМ - будет гораздо полезнее. Он там достаточно простой.
Ser60 писал(а):Но скорее всего, Вы и имели в виду С
Да, прошу прощения, перепутал
С конфигурацией ШИМ разобрался, спасибо,
А еще возник вопрос: Вы в статье написали, что максимум можно передать 63 байта. Я правильно понимаю, что можно в 1 байт запихать положение 8 кнопок, или 8 лампочек? и что на каждый 8 битный ШИМ нужен отдельный байт?
Какую статью Вы имеете в щиду? Если про USBXpress, то передавать массив можно любой длины, деля его на куски. Там в апноутах фирмы есть соответствующие примеры. Если-же про HID, то длина пакета - это стандард протокола. Можно, конечно, передавать и более длинные сообщения, опять-же деля их на куски.
Да, в один байт можно запихать инфу о 8 кнопках или лампах. Про ШИМ не совсем понял вопрос. Если Вы имели в виду как управлять скважностью каналов Шим, то да - на каждый канал там в МК есть регитср отвечающий за скважность ШИМ в этом канале.