По поводу подтягивающих резисторов КРАМ ответил. Вместо них можно использовать ноги МК, переключая их на вход на время гашения.
Как бы у входа наоборот, высокое входное сопротивление.
Если подтяжка нулем на выходе не помогает, то перевод на вход......
база транзистора висит в воздухе.
Значит поставил я pnp транзистор..И это сильно снизило засветку индикатора(пауза менее 1мс) правда тупит немного.видимо пересчитать резистор базы надо..я думаю еще лучше ставить полевики.Вроде они намного быстрее переключаются..
Заодно спасибо и может кто подскажет типа аналога uln2003 .?только чтобы нагрузка подключалась не перед ней (uln2003) а после нее /него (драйвера )
Собственно чтобы научиться писать на Си, собственно для PIC это основной язык программирования, вам потребуется всего ничего.
1. Четко выучить синтаксис языка, любая вменяемая книга по Си в помощь, для начала нужно знать где правильно ставить точку с запятой и пару операторов.
2. Представлять структуру микроконтроллера под который пишете код. без этого вы ничего вменяемого не напишите.
3. Основательно изучить описание на ваш компилятор, этот хитрый парень может напутать вам все карты, в своей манией оптимизации все вам может изгадить.
4. Правильные примеры исходников и структуры проектов.
Начал осваивать С для пиков через протеус и наткнулся на странный прикол. У меня не компилируется больше ОДНОЙ функции! Причём поменял хайтековский с на ХС8 - та же хрень! На синтаксис софтина не матерится, симуляцию запускает, но в листинге напротив всех функций, кроме первой, опкоды ОТСУТСТВУЮТ и обращение к оным в пошаговом режиме просто проскакивается, как комментарий.
Это какое-то ограничение самого Протеза, бесплатной версии компилятора или я что-то пропустил?
С язък хорошии и мощнъй, но не терпит своеволия
Как оределяется функция
Пример:
int - тип возвращаемого резултата
my_func( - имя функции
int a, int b) - тип и имя параметров
{
return a+b; - тело функции
}
- здесь ничего не надо ставить, даже и ;
можно директивъ препроцессора, но ето плохой стил
void main(void)
{
....
думаю что у тебя компилятор ругается из за наличие ; там где ему не место.
Лом - ето город в Болгарии, а не инструмент юстировки електроники.
Для нерусских повторю: компилятор НЕ РУГАЕТСЯ. Он честно и без ошибок переводит остаток программы в код и запускает симулятор. Но для приведённых в листинге ПУСТЫХ (void) функций (т.е. процедур) даже адресов не назначает!
При этом если в них нарушить синтаксис, компилятор выматерится.
Спасибо, брат-славянин! Книга сия у меня есть, но, пока размышлял, что тебе могло не понравиться, обратил внимание, что процедуры типа void всё равно при вызове должны содержать скобки. О чём я, не писавши на Си уже добрых лет 15, благополучно забыл. Можно было сразу носом ткнуть.
Собственно, вопрос не вопрос, но интересно.
Компилятор МикроСи для PIC от Микроэлектронники.
Писал код для 16Ф628. Т.к. код получился больше и не компилировался, указал 16Ф648. Потихоньку оптимизировал, получилось ровно 2048. Вернул тип камня 16Ф628 и код скомпилировался ещё меньше. Въедливо разницу меж камнями не вычитывал, кроме объёма флеши, но на вскидку они не отличаются. Тем более, что код не имеет аппаратнозависимых функций, используется только прерывание по таймеру, софт-UART и библиотека 1602. Интересно, почему компилируется разный объём прошивки?
И более существенный вопрос. В МикроСи есть возможность задавать уровень оптимизации? Полазив по менюшкам - не нашёл.
Немного глупый вопрос. В С есть функции для работы с WDT? Нужно просто менять время срабатывания в коде. А компилятор даёт вроде только через #pragma. Регистра CW1 ваще нету в дефайнах. Или только __asm ("") делать?
Всем привет! А нельзя ли использовать модуль CCP, конкретнее PWM стандартный режим в любых портах выводить? Мне пока известно, что выход CCP1 настроен только на один вывод, а мне нужно в трех пинах? ECCP не нужен.
#pragma orgall 0x7CC0
#define BOOTLOADER_START_ADDR 0x7CC0
#define START_PROGRAM_ADDR 0x7FC0
static char block[64];
void Start_Program() org START_PROGRAM_ADDR{
}
unsigned short UART_Write_Loop(char send, char receive){
unsigned int rslt = 0;
while(1){
Delay_5ms();
UART2_Write(send);
Delay_5ms();
rslt++;
if (rslt == 0x0200)
return 0;
if (UART2_Read() == receive)
return 1;
}
}
void Write_Begin(){
FLASH_Erase_Write_64(START_PROGRAM_ADDR, block);
//--- goto main
block[0] = 0x60; //0xF03EEF60
block[1] = 0xEF;
block[2] = 0x3E;
block[3] = 0xF0;
}
void Start_Bootload(){
char i = 0, xx, yy;
long j = 0;
while (1) {
if (i == 64) {
//--- If 32 words (64 bytes) recieved then write to flash
if (!j)
Write_Begin();
if (j<BOOTLOADER_START_ADDR){
FLASH_Erase_Write_64(j, block);
}
i = 0;
j += 0x40;
}
//--- Ask for yy
UART2_Write('y');
while (!UART2_Data_Ready()) ;
//--- Read yy
yy = UART2_Read();
//--- Ask for xx
UART2_Write('x');
while (!UART2_Data_Ready()) ;
//--- Read xx
xx = UART2_Read();
//--- Save xxyy in block[i]
block[i++] = yy;
block[i++] = xx;
}
}
void main() org BOOTLOADER_START_ADDR{
// ANSELC = 0; // Configure PORTC pins as digital
UART2_Init(115200); // Init USART at 115200
if (UART_Write_Loop('g','r')) { // Send 'g' for ~5 sec, if 'r'
Start_Bootload(); // received start bootload
}
else {
Start_Program(); // else start program
}
}
В результате: соединение устанавливается, прошивка заливается через бутлоадер. Но после ресета, загрузки залитой программы не происходит. Почему то всё время загружается бутлоадер.
Подскажите, в чем может быть дело?
здравствуйте . подскажите пожалуйста существуют ли переменные длинной в 64 бита под pic16 pic18
если нет то как выйти из положения если требуется простая арифметика с числами в 64бита и болие
спасибо!
В PIC16 и PIC18 нет переменных. В них есть область памяти, которая выделяется компилятором под переменные. Соответственно, всё зависит от компилятора, а не платформы.
это я понимаю ,спасибо постараюсь изъяснятся точнее
Покажите пожалуйста пример создания целочисленной без знаковой переменной длиной в 64 бита
и еще хотелось бы знать какой именно компилятор "такое проглотит"
Вот здесь возникает вопрос - 1. Кто и как напишет код для "простой арифметикой" с переменной в 64 бита?
и 2. Зачем вам такие числа 2^64? Въ атомъ в Вселенную будете считать?
Лом - ето город в Болгарии, а не инструмент юстировки електроники.