nybörjar fråga avr-gcc

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
sven
Inlägg: 113
Blev medlem: 16 september 2003, 17:47:19

nybörjar fråga avr-gcc

Inlägg av sven »

¨har suttit och pillat meden avr å avr gcc ett tag nu..
har fått leds att lysa osv, menhur gör jag om jag vill att en led ska tändas när jag trycker på en knapp? får inte till det =/

har ledsen på porta och knapparna på portc

nån som kan ge ett snabbt och enkelt exempel?
gille
Inlägg: 69
Blev medlem: 28 november 2004, 18:06:09
Ort: Stockholm
Kontakt:

Inlägg av gille »

Nu ska jag inte svära på att du missat det här men..
hur ser din kod ut?

typ såhär:
while(1) {
if(PORTC)
PORTA=0;
else
PORTA=0XFF;
}

? Om den är så kommer du få knappstudsar och blinka i rask takt med en hyfsad sannolikhet för att sluta med släkta dioder.
Användarvisningsbild
Xyzzy
Inlägg: 1260
Blev medlem: 30 januari 2004, 22:31:07
Ort: Uppsala, Sweden

Inlägg av Xyzzy »

Och ska du LÄSA från en port (dvs en ingång) ska du skriva typ:

if(PINC)
...

och innan naturligtvis definera PINc som ingångar
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

Enklast tycker jag är att koppla knappen till någon INTn-pinne. Då kan du välja att få en interrupt när pinnen går från hög till låg eller tvärtom. Sätter du dessutom en konding över knappen till jord och kör med det inbyggda pullup:et så slipper du tänka på mjukvaruavstudsning.

Så här kan du göra om du har en knapp kopplad mellan jord och INT0 (PD2 på Mega48) och en lysdiod på PD4:

Kod: Markera allt

#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>

INTERRUPT (SIG_INTERRUPT0)
{
	PORTD ^= _BV(PD4);
}

int main()
{
	DDRD = _BV(PD4); // Sätter PD4 som utgång
	PORTD = _BV(PD2); // Aktiverar pullup på PD2

	// Aktiverar INT0 att trigga på fallande flank
	// (lite beroende på vilken AVR du har)
	EICRA = _BV(ISC01);
	EIMSK = _BV(INT0);

	sei();

	while (1)
	{
	}

	return 1;
}

Skriv svar