Ви використовуєте застарілий браузер. Цей та інші сайти можуть відображатися в ньому некоректно. Необхідно оновити браузер або спробувати використовувати https://www.google.com/chrome/
Главное в подключении детонатора к рации - шумодав по ниже выставить. Лучше - вообще на единичку. А-то, если завысить, то может не сработать, и дальность падает...
В новопороссии можно шумодав при этом деле вообще отключать, глевное - отключать сразу после установки детонатора.
Ай нид хелп виз грёбаный микрочип!
Есть тут кто-нибудь?
Всё бегает в симуляторе в MPLAB x IDE и ни хера не бегает в камне. Вообще. Грёбаный хэллоу ворлд не работает.
Я чего-то не понимаю.
Если есть кто - суну сюда код, бо я моск сейчас сломаю...
Это первый и последний мой раз, когда я беру в руки эту поебень. НО! Их таки валяется на складе на несколько тысяч гривен и их надо куда-то сплавить. А чтобы их сплавить - на них надо что-то написать, поскольку то, что когда-то на них было - уже к *****м снято с производства и заменено на нормальное.
Тактирование ядра, скорее всего. Я сначала думал, что с таймером веду себя неправильно, однако сделал программный делей и... ни хрена не поменялось.
Конфиги хавает нормально - включается отключается кварц, кварц молотит исправно, но... прога не бежит. И не бежит как-то странно...
Вот в начале мэйн инициализация порта - проходит. То есть, я трис и порт переставляю - меняется их поведение, но, сцуко, только один раз и-то неправильно.
Может мне оптимизыция выкинула мэйнлуп? Так нет - симулятор бодро скачет и даже отрабатывает прерывание
Короче, какая-то неведомая хрень, или я что-то не включил.
P.S. А с банками там что-то надо делать? А-то я в pdf вижу аж несколько TRIS...
О каком PIC идет речь? В 628-ом, например, TRIS находится в первом банке. И перед обращением к TRIS нужно проследить, чтобы был именно первый банк. Есть регистры, которые находятся в обоих банках... За банками нужно следить, как правило, при написании программы на asm. Компиляторы Си сами вставляют в код переключение банков.
О каком PIC идет речь? В 628-ом, например, TRIS находится в первом банке. И перед обращением к TRIS нужно проследить, чтобы был именно первый банк. Есть регистры, которые находятся в обоих банках... За банками нужно следить, как правило, при написании программы на asm. Компиляторы Си сами вставляют в код переключение банков.
Ну, проблема #1 решилась - теперь перед входом в мэйнлуп выводы задаются правильно. Некто спёр конденсатор фильтра с платы. Пик отказался работать на одной керамике, вернул на место электролит - теперь работает следующая часть кода:
Код:
int main(int argc, char** argv) {
INTCON = PIE1 = 0; // Пока запрет всех прерываний
PCON |= 0b00001000;
timer=0;
ticktimer=0;
flags=0;
unsigned char sourceTMR0 = PRELOAD;// начальное значение TMR0 131
OPTION_REG=0x00;
PIE1 = 0x00;//забили прерывания от периферии (кроме Т0)
INTCON |= 0b11100000; //разрешили прерывания от T0
OPTION_REG=0b00000100;
//-------------------------------------------------------------
PORTA=0x00;// Порт A - на выход и в ноль.
TRISA=0x00;
TRISB=0b00000000;
PORTB=0b11110000;
// VRCON=1;//отключили источник опорного
while(1)
{.....
В while(1) что не вставляю - не отрабатывается.
Похоже, оптимизация оттуда все выкидывает.
НО! Если я там ставлю просто PORTB=0bxxxxxxxx;
оно отрабатвается. В любом цикле, или по прерыванию - нет.
Код:
if (PORTB==0xFF)
{
PORTB=0x00;
}
else
{
PORTB=0xFF;
}
работать не хочет ни в какую.
//---------------------------------------
Стоп... стесняюсь спросить - а читать так порт, как я, можно?
Потому как - если я дёргаю одной ногой и читаю RB0, а по нем инвертирую - всё работает!
Да, так просто - нельзя. Надо сначала было включить PGM в качестве GPIO.
А в атмеле не так... там если в порт что-то ляпнул - оно там в регистр и запишется, а если надо читать состояние - там ещё регистр... Вопля какая.
Вы привели лишь фрагмент кода. Пришлось убрать "лишнее", так работает. В симуляторе. Но я уверен, что будет и в железе, могу запустить на макете, если актуально.
Лишнее в данном случае это разрешение прерываний без их обработки.
Что касается регистров, то в PIC есть особенность. "Все операции записи в порт выполняются по принципу "чтение-модификация-запись", т.е. сначала производится чтение состояния выводов порта, затем изменение и запись в защелку". По Вашему фрагменту кода и без схемы непонятно, скорее всего этот нюанс ни при чем.
Код:
#include <pic.h>
//------------------------------------------------------------------------------
int main(int argc, char** argv) {
__CONFIG(WDTDIS & HS & UNPROTECT & BORDIS & MCLRDIS & LVPDIS);
INTCON = PIE1 = 0; // Пока запрет всех прерываний
PCON |= 0b00001000;
// timer=0;
// ticktimer=0;
// flags=0;
//unsigned char sourceTMR0 = PRELOAD;// начальное значение TMR0 131
PIE1 = 0x00;//забили прерывания от периферии (кроме Т0)
// INTCON |= 0b11100000; //разрешили прерывания от T0
OPTION=0b00000100;
//-------------------------------------------------------------
PORTA=0x00;// Порт A - на выход и в ноль.
TRISA=0x00;
TRISB=0b00000000;
PORTB=0b11110000;
// VRCON=1;//отключили источник опорного
//бесконечный цикл
while(1) {
if (PORTB==0xFF)
{
PORTB=0x00;
}
else
{
PORTB=0xFF;
}
}
Вы привели лишь фрагмент кода. Пришлось убрать "лишнее", так работает. В симуляторе. Но я уверен, что будет и в железе, могу запустить на макете, если актуально.
Лишнее в данном случае это разрешение прерываний без их обработки.
Что касается регистров, то в PIC есть особенность. "Все операции записи в порт выполняются по принципу "чтение-модификация-запись", т.е. сначала производится чтение состояния выводов порта, затем изменение и запись в защелку". По Вашему фрагменту кода и без схемы непонятно, скорее всего этот нюанс ни при чем.
Код:
#include <pic.h>
//------------------------------------------------------------------------------
int main(int argc, char** argv) {
__CONFIG(WDTDIS & HS & UNPROTECT & BORDIS & MCLRDIS & LVPDIS);
INTCON = PIE1 = 0; // Пока запрет всех прерываний
PCON |= 0b00001000;
// timer=0;
// ticktimer=0;
// flags=0;
//unsigned char sourceTMR0 = PRELOAD;// начальное значение TMR0 131
PIE1 = 0x00;//забили прерывания от периферии (кроме Т0)
// INTCON |= 0b11100000; //разрешили прерывания от T0
OPTION=0b00000100;
//-------------------------------------------------------------
PORTA=0x00;// Порт A - на выход и в ноль.
TRISA=0x00;
TRISB=0b00000000;
PORTB=0b11110000;
// VRCON=1;//отключили источник опорного
//бесконечный цикл
while(1) {
if (PORTB==0xFF)
{
PORTB=0x00;
}
else
{
PORTB=0xFF;
}
}
Да, благодарю за участие Всё ещё вчера за работало.
Ньюанс оказался в том, что в пике, в отличие от атмела, чтение и запись происходит через один и тот же видимый мне регистр. PGM был активен как PGM, соответственно, он как пин ни чего не делал и читался всегда как "0". Естественно, что сравнение всего порта с FF ни когда не происходило в "да".
Я забил его как пин и всё заработало.
Но что удивило и не порадовало - симулятор ни чего об этом не знал и в симуляторе все работало. Хотя, он мог бы и догадаться, что с пина, который задан как PGM, если в него 1 записать, то все равно 0 прочитается. В атмеле с симулятором в этом плане по лучше дело обстоит.