2014-02-03 5 views
0

У меня проблемы с программированием, так как я новичок, и я пытаюсь прочитать поезд с квадратным импульсом, входящий в один из моих цифровых контактов GPIO моего микроконтроллера PIC. Я должен «пробовать», а затем хранить входящий сигнал, чтобы у меня была сгруппирована 1 и 0 (возможно, в массиве). Я должен сохранить число 1 и 0, которые я получаю (которые отбираются в пакетах по 8, 4 раза) и вычисляют количество 1 или 0 в среднем.Embedded C GPIO Issue

Кто-нибудь знает, как я могу начать выполнение этого в коде C?

+0

Моя проблема в том, что я действительно не знаю, что я делаю, и даже не имею отправной точки - если бы я должен был сказать, что у меня было что-то, то это было бы – Stumpyhuck29

+0

. Вы могли бы хотя бы написать свои мысли, какие данные структуру, которую вы, возможно, захотите использовать для хранения дискретизированных данных, как вы будете вычислять среднее значение с ней и т. д. Вы также можете написать некоторый псевдокод и сказать, что вы действительно не знаете синтаксис достаточно хорошо, чтобы перевести его на C –

ответ

2

Я бы разбил его на куски. Создать что-то, что читает входной строки внутри цикла:

unsigned int input; 

for (;;) /* infinite loop */ 
{ 
    input = ReadInput(); 
    printf ("%d\n",input); 
} 

Вы должны создать что-то для ReadInput(), надеюсь, у вас есть пример вы можете следовать. Это будет зависеть от точного ПОС, который вы используете, и какая строка ввода считывается.

После того, как вы видите, что он правильно читает строку ввода, добавьте функцию sleep(), чтобы замедлить ее до разумного (ваша частота выборки), изменить ввод в массив (input[x++] = ReadInput();) и выяснить, как вы хотите цикл до конца. Но это поможет вам начать.

0

Если бы я сделал это, я бы, вероятно, установил обработчик GPIO ISR для прерывания на выводе GPIO каждый раз, когда значение GPIO изменилось, и счетчик с параллельным подсчетом. Затем, если значение gpio изменяется, прерывание срабатывает, и вы можете прочитать таймер и просто посмотреть, сколько времени прошло с момента последнего изменения GPIO (и затем вы можете попробовать, как захотите). Я думаю, что это самое точное решение.