Atmel v C vstupy vs výstupy

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Uživatelský avatar
Peedros
Příspěvky: 349
Registrován: 07 dub 2009, 02:00
Bydliště: Plzeň

Atmel v C vstupy vs výstupy

#1 Příspěvek od Peedros »

Ahoj,
chtěl bych poprosit někoho zkušenějšího, aby mi poradil s programem pro Atmel v C (CodeVision AVR). Zkusil jsem jenom jednoduchej prográmek pro ATINY13 na vstupy a výstupy , abych viděl, jestli to funguje tak jak si myslím. Jenže to tak není a nemůžu přijít na to proč.

DDRx - nastavuje na příslušným portu x vstupy nebo výstupy ?
PORTx - nastavuje u výstupních pinů H nebo L úroveň?
PINx.x - čte hodnotu H nebo L na příslušným pinu příslušného portu?

Problém je, že jako výstupní piny se nastaví piny B.1, B.2 a z PINB.0 mi to nikdy nenačte log. úroveň ( testováno v AVR studio v4.19). Nevím v čem by mohl být problém,nejspíš, že to nastavení vstupních a výstupních portů nemůže být libovolně. Chtěl bych poprosit nějakou dobrou duši, jestli by mi to vysvětlila, které vstupy a výstupy lze použít a potvrdila ty tři otázky výše. Díky!

#include <tiny13.h>
#include <delay.h>
unsigned int i=0;

void main(void)
{
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

PORTB=0x00;
DDRB.0=0; //nastavení B.0 jako vstupu
DDRB.1=0;
DDRB.2=0;
DDRB.3=1; //nastavení B.3 jako výstupu
DDRB.4=1; //nastavení B.4 jako výstupu
DDRB.5=0;

TCCR0A=0x00;
TCCR0B=0x00;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;
GIMSK=0x00;
MCUCR=0x00;
TIMSK0=0x00;
ACSR=0x80;
ADCSRB=0x00;
DIDR0=0x00;
ADCSRA=0x00;

while (1)
{
if (PINB.0 == 1){ //čtení z B.2 a log. podmínka
PORTB.3=0;
delay_ms(500);
PORTB.4=0;
i=2;
}
else { if (i==0) { // jinak
delay_ms(20000);
PORTB.3=1; // B.3=1
delay_ms(10000);
PORTB.4=1; // B.4=1
i=1;
};

if (i==2) { // B.3=1
PORTB.3=1;
delay_ms(10000);
PORTB.4=1; // B.3=1
i=1;
};
};
};
}

Uživatelský avatar
AB1
Příspěvky: 312
Registrován: 23 lis 2009, 01:00

#2 Příspěvek od AB1 »

Zkus třeba

Kód: Vybrat vše

 //tlačítko na portb.0 proti zemi
 //led na portb.1 proti +5V (přes odpor v serii)

//=====================================================================
void main(void)
{
DDRB  = 0b00000010; // portb.1 výstupní, ostatní vstupní  
PORTB = 0b00000001; // pull-up na portb.0  

    while (1)         
    {   
       PORTB.1 = PINB.0; // při stisknutém tlačítku dioda svítí
    }
}
Naposledy upravil(a) AB1 dne 24 bře 2012, 19:01, celkem upraveno 1 x.

Uživatelský avatar
Galileo
Příspěvky: 77
Registrován: 09 lis 2009, 01:00

#3 Příspěvek od Galileo »

Napřed zkus jestli ti procesor vůbec běží
třeba tak


while(1)
{
PORTB.3 =! PORTB.3;
delay_ms(500);
}

Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“