Sida 2 av 5
Postat: 24 april 2005, 09:27:26
av MicaelKarlsson
testa
if (PINC==0x02)
{PORTB=0x1}
Har du något mer anslutet på PORTC?
Testa med att sätta allt annat på PORTC till 0 eller plocka bara ut den du vill kolla(kan göras med en &-funktion om jag minns rätt).
EDIT:
if (PORTB&0x02==0x02)
{
PORTB=0x1
}
Postat: 24 april 2005, 09:30:49
av Macce
Winavr gillar inte dendär koden.
µCn är en at90s2313 på en devplatta/programmerare med PD0-PD7 kopplade till leds och PD2-5 kopplade till tryckknappar. Så PORTC finns väl inte på denna cpu?
EDIT: Den senare koden accepterade WinAVR efter att jag lade ; efter PORTB raden. När jag kör koden så lyser en led hela tiden, oberoende av läget på knappen.
Postat: 24 april 2005, 09:42:51
av MicaelKarlsson

Klart det skall vara PORTB=0x1;
Har glott lite i databladet för 2313at90s.
Jag blandade ihop PIN och PORT, testa detta istället!
if (PINB&0x02==0x02)
{
PORTD=0x1;
}
EDIT Gaaaaahhhhh......!!!! semikolon, (jag blir galen)
Postat: 24 april 2005, 09:48:21
av Macce
Händer fortfarande inget...

Postat: 24 april 2005, 09:52:26
av MicaelKarlsson
Alla leds funkar?
Skall du initiera stackpekar på 2313?
EDIT:
ldi r16,RAMEND ;Init Stack Pointer
out SPL,r16
Är ju asm, men det borde väl funka utan i C....
EDIT 2:
- Stackpekaren skall inte initieras i C
Snodde en initiering av 90s2313 från CodeVisionAVR (utvärderingsversionen)
PORTB är ut (leds)
PORTD är in (knappar)
Kod: Markera allt
#include <90s2313.h>
// Declare your global variables here
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port B initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTB=0x00;
DDRB=0xFF;
// Port D initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=0x00;
TCNT0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1 output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
OCR1H=0x00;
OCR1L=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
GIMSK=0x00;
MCUCR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
// Analog Comparator Output: Off
ACSR=0x80;
while (1)
{
// Place your code here
};
}
Har du testat så du får ca: 5V när tryckknapparna är höga?
Postat: 24 april 2005, 10:12:26
av Macce
WinAVR vill inte kompliera dendär koden, den klagar på alla funktioner (undeclared (first use in this function)).
När jag tynger på tryckknapparna blir det 0V till AVRens ingångar, inte 5V.
Postat: 24 april 2005, 10:26:05
av MicaelKarlsson
Det är include-filen som bråkar.
Jag har aldrig kommit överens med aktivt låga tryckknappar, varför vet jag inte.
Postat: 24 april 2005, 10:31:05
av Macce
Ok. Tack för hjälpen iaf.
Hoppas någon annan har erfarenheter av tryckknappar som blir låga när man tynger på dem..skulle vilja få detta att fungera nu..
Det måste väl finnas någon guide, eller hur har ni andra lärt er?
Postat: 24 april 2005, 10:35:02
av MicaelKarlsson
Men.... vänta lite nu
Om du testar att tryckknappen blir noll så måste (borde) det funka.
if (PINB&0x02==0x0)
{
PORTD=0x1; //Fniss jag kom ihåg semikolon.
}
Postat: 24 april 2005, 10:39:45
av Macce
nä, inget händer fortfarande

Postat: 24 april 2005, 10:41:44
av MicaelKarlsson
Gör ett test med aktivt hög tryckknapp, om det inte blir för mycket strul!
Postat: 24 april 2005, 10:57:59
av Macce
provade att dra 5V direkt till porten, näpp, inget händer då heller.
Postat: 24 april 2005, 11:03:18
av MicaelKarlsson
Kollat initieringarna av portarna?
leds funkar?
funkar att blinka med alla leds?
2313 funkar?
programmeringen av 2313 funkar?
glappkontakt? (jo jag vet men det kan va så enkelt)
Postat: 24 april 2005, 11:07:48
av Macce
All kod:
Kod: Markera allt
#include <avr/io.h>
int main(void)
{
DDRB = 0xFF;
DDRD = 0x00;
while(1)
{
if (PORTB&0x02==0x02)
{
PORTB=0x1;
}
}
}
Har provat att blinka ledsen och de fungerar. 2313an (borde) fungera, samma sak fast jag lägger in en tiny2313. Programmeringen fungerar också.
Glappkontakt borde det inte vara.
Postat: 24 april 2005, 11:08:12
av cykze
Från din kod på förra sidan:
Kod: Markera allt
int main()
{
DDRB = 0xFF;
DDRD = 0x00;
PORTB = 0xFF;
while (1)
{
if (PORTD == _BV(2)) // Ändra till if (!(PIND & _BV(PD2)))
{
PORTB == _BV(0); // Ändra till PORTB = _BV(PB0);
}
else // Lägg till dessa rader för att märka skillnad när du sedan släpper upp knappen
{
PORTB = 0;
}
}
}
edit: lite