Stránka 1 z 1

ATMEGA16A nelze číst vstup první program

Napsal: 17 led 2017, 17:43
od office37
Dobrý den,

Pořídil jsem desku s MCU AVR ATMEGA 16A a AVR Dragon jako programátor.
Nemohl by někdo poradit proč,nelze číst sepnuté tlačítko na pinu PC7?

Kód: Vybrat vše

#include <avr/io.h>
#include <util/delay.h>
#ifndef F_CPU
#define F_CPU 16000000UL // 16 MHz clock speed
#endif
#define SET_BIT (byte, bit) (byte |= (1 << bit))
//#define BIT_IS_SET(byte, bit) (byte & (1 << bit))

int main(void)
{
	
 DDRC = 0x00; //nastaveni do vystupu
 PORTC = 0xFF; // internal pull up
 DDRA |=(1 << PA1); //nastaveni vystupu
 DDRA |=(1<< PA2);
 DDRA |=(1<< PA3);




  while(1)
  {
	
	 
if(!(PINC & (1 << PC7))) 
{
	PORTA |= (1 << PA1);
	PORTA &= ~(1 << PA3);
}
else{
	
	PORTA &= ~(1 << PA1);
	PORTA |= (1 << PA3);
}


}



Napsal: 17 led 2017, 17:54
od office37
Tlačítko spíná k zemi ,zkouším to podle tutoriálu -fyzicky se napětí mění,ale program nereaguje.

Napsal: 17 led 2017, 18:31
od mtajovsky
Tohle prošlo překladem? Chybí jedna složená závorka na konci.

Jinak - Dragon je také debugger, není nic jednoduššího, než program krokovat a podívat se na stav bitů v PORTC.

Napsal: 17 led 2017, 19:54
od office37

Kód: Vybrat vše


#include <avr/io.h>
#include <util/delay.h>
#ifndef F_CPU
#define F_CPU 16000000UL // 16 MHz clock speed
#endif
#define SET_BIT (byte, bit) (byte |= (1 << bit))
//#define BIT_IS_SET(byte, bit) (byte & (1 << bit))

int main(void)
{
	
 DDRC = 0x00; //nastaveni do vystupu
 PORTC = 0xFF; // internal pull up
 DDRA |=(1 << PA1); //nastaveni vystupu
 DDRA |=(1<< PA2);
 DDRA |=(1<< PA3);




  while(1)
  {
	
	 
if(!(PINC & (1 << PC7))) 
{
	PORTA |= (1 << PA1);
	PORTA &= ~(1 << PA3);
}
else{
	
	PORTA &= ~(1 << PA1);
	PORTA |= (1 << PA3);
}


}


	return 0;
}
Omlouvám se špatně jsem to zkopíroval,ale nemůžu se dostat na desku ani přes JTAG connector ....končí to ERROREM takže debug nemůžu použít ,ale zdá se mi že chyba je spíše v tom programu.Za pomocí simulátoru se nedostávám do větve if.

Napsal: 17 led 2017, 20:33
od office37
Špatný pin na desce byl můj problém .Dělat v šeru se nevyplácí.
Ale stále mám problém s připojením JTAG ......Unable enter to programming mode.

Napsal: 17 led 2017, 20:57
od frpr666
1/ Zkus zkompilovat a nahrát nejprve "prázdný" program pomocí ICP.
2/ Zkontroluj "pojistky", zda je JTAG povoleno.
3/ S Avrdragon by neměl být problém v helpu v AvrStudio je spousta obrázků, jak se připojuje na které piny.
4/ Avrdragon nemá obal, doporučuji jej dát minimálně do nějakého (ESD) sáčku, tak aby nehrozil přímý dotyk. Na internetu píšou, že lze snadno zničit, pokud se nešťastně dotkneš na určité místo.

Kód: Vybrat vše

#ifndef F_CPU
#define F_CPU 16000000UL // 16 MHz clock speed
#endif

#include <avr/io.h>
#include <util/delay.h>

#define SET_BIT (byte, bit) (byte |= (1 << bit))
//#define BIT_IS_SET(byte, bit) (byte & (1 << bit))
int main(void)
{
	while(1)
	{
	}
	return 0;
}

Napsal: 18 led 2017, 10:21
od FHonza
JTAG je aktivní, když druhý nejvyšší bit v Hfuse není nastaven, tj. x0xx xxxx

U ATMega16 je JTAG na portu PC (konkrétně PC2 až PC5). Pravděpodobně něco dalšího připojeného na tyto piny blokuje komunikaci JTAGu.