Přeji dobrý den všem programátorům. Přicházím jsem s menší prosbičkou o pomoc někoho zkušeného s AVR platformou a její samotné programování v C++, nebo aspoň někoho kdo by byl schopen poradit.
Mam zapojení mikrokontroléru následující. Na pinu PB0 mam vodič který je připojen k externímu pull-up rezistoru (4,7 Ω), k němu mam připojený další vodiče a to jeden z arduina který pomocí jedné libky posílá puls který spíná zem, a zbývající vodič k osciloskopu. A teď zpět ke kódu, nyní mam průběh signálu oddělen že z jednoho pinu čtu (tedy PB0) a na základě přijatých dat z PB0 generuji výstupní signál na dalšim portu PB1, ale teď to chci zakombinovat na jeden jediný port, tedy PB0. Abych z něco vyčetl informaci a posléze přepl do write režimu a vygeneroval impuls na jednom pinu. Neni to přece nic složitého, ale zrovna jsem se zasekl nad tím problémem že pokud měnit směr DDRB registru z read režimu na write, nebo pouze na ten samý kod prostě přestane fungovat, a to konkrétně na boolu bFallin
#define F_CPU 1000000
#include <avr/io.h>
#include <util/delay.h>
#define INPIN PB0
bool bFalling = false;
bool bRising = false;
bool bReset = false;
#define DEBUG_MODE_GROUD 0
void debugWriteSignal(int Port, int Mode)
{
if(Mode == DEBUG_MODE_GROUD)
{
PORTB &= ~_BV(1);
_delay_us(10);
PORTB |= _BV(1);
_delay_us(10);
PORTB &= ~_BV(1);
_delay_us(10);
PORTB |= _BV(1);
}else{
}
}
int main (void)
{
DDRB &= !_BV(INPIN);
DDRB |= _BV(1);
/* Button input */
//DDRB &= !_BV(PB2);
//PORTB |= _BV(PB2);
/* Init */
bFalling = false;
bReset = false;
bRising = false;
for (;;)
{
if(bReset == false)
{
//DDRB &= !_BV(INPIN); --- Znefunkční kod v podmince bFallin - Proč?!
/* Fallin edge */
if(bit_is_clear(PINB, INPIN))
{
if(bFalling == false)
{
//debugWriteSignal(1, DEBUG_MODE_GROUD);
}
bFalling = true;
}else{
if(bFalling)
{
//debugWriteSignal(1, DEBUG_MODE_GROUD);
_delay_us(60);
PORTB &= ~_BV(1);
_delay_us(200);
PORTB |= _BV(1);
}
bFalling = false;
//bReset = true;
}
}
}
}
Takto vypadá průběh signalu pokud vše pracuje jak má. (Tedy že se vyšle signal z channelu0).
Díki za pomoc a rady.