ATMEGA16A nelze číst vstup první program

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
office37
Příspěvky: 10
Registrován: 17 led 2017, 01:00

ATMEGA16A nelze číst vstup první program

#1 Příspěvek 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);
}


}



Uživatelský avatar
office37
Příspěvky: 10
Registrován: 17 led 2017, 01:00

#2 Příspěvek od office37 »

Tlačítko spíná k zemi ,zkouším to podle tutoriálu -fyzicky se napětí mění,ale program nereaguje.

Uživatelský avatar
mtajovsky
Příspěvky: 3694
Registrován: 19 zář 2007, 02:00
Bydliště: Praha

#3 Příspěvek 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.

Uživatelský avatar
office37
Příspěvky: 10
Registrován: 17 led 2017, 01:00

#4 Příspěvek 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.

Uživatelský avatar
office37
Příspěvky: 10
Registrován: 17 led 2017, 01:00

#5 Příspěvek 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.

Uživatelský avatar
frpr666
Příspěvky: 1051
Registrován: 28 pro 2009, 01:00

#6 Příspěvek 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;
}

Uživatelský avatar
FHonza
Příspěvky: 1443
Registrován: 20 lis 2012, 01:00
Bydliště: Praha

#7 Příspěvek 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.

Odpovědět

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