PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Einfach Eingang auf Ausgang schalten ?



Gregor1984
13.10.2006, 13:39
Hallo Leute,

irgendetwas mache ich falsch, aber ich weiß nicht was.
Ich verwende das STK500, WinAVR und einen ATMEGA8515L.
Als einfachen Einstieg wollte ich nicht mehr als eine LED zum leuchten bringen wenn ich eine Taste drücke, aber obwohl ich den µC jedes mal lösche scheint da ein anderes Programm zu laufen weil anstelle das alle LEDs leuchten oder das ganze nur einmal ausgeführt wird o.ä. Was Fehler wären die ich verstehen würde, binkt LED1 immer in etwa 1s Intervallen.
Liegt's daran das noch irgendetwas am µC steht oder am Code ?

Vielen Dank für eure Hilfe.

Lg,
Gregor


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


uint8_t input = 0x00;


void main()
{

DDRB = 0xff; //Port B = Ausgang
DDRD = 0x00; //Port D = Eingang

while(0)
{
input = PIND; //Port D in input einlesen
PORTB = input; //input auf Port B ausgeben
};



};

Pascal
13.10.2006, 14:00
Bist du dir auch sicher, dass du den AVR richtig "geflasht" hast?

Kannst du dein Problem bitte nochmal etwas verständlicher schildern?

robocat
13.10.2006, 15:08
du hast auch so ein "while(0)" verbaut...

squelver
13.10.2006, 15:12
Ist es üblich hinter den schliessenden spitzen Klammern noch n Simecolon zu setzen?

Pascal
13.10.2006, 15:20
du hast auch so ein "while(0)" verbaut...

des is so simpel, dass es mir vorhin gar nicht aufgefallen ist ;-)
@Gregor1984: das muss natürlich


while(1)

heißen. So, wie du es im Moment hast, wird die Schleife nie ausgeführt, da 0 schließlich immer false ist.



Ist es üblich hinter den schliessenden spitzen Klammern noch n Simecolon zu setzen?

Ich mach das jedenfalls immer ohne diese Semikolons. Wie es irgendein Standard vorschreibt, weiß ich nicht.

squelver
13.10.2006, 15:23
Der Schreibweise gegenüber php/ javascript ist da doch kein großer Unterschied, oder doch?

Pascal
13.10.2006, 15:32
ich glaub nicht, dass da ein Unterschied von der Schreibweise her ist

Gregor1984
13.10.2006, 16:53
Danke für den Tip mit dem while(1), aber der Schlüssel zum erfolg war dach auch noch nicht.

squelver
13.10.2006, 16:57
Versuchs mal: Mach mal die überflüssigen Simecolions wech \:D/

techboy
13.10.2006, 18:58
Würde ich auch sagen....soweit ich weiß sind die dort nicht Vorgeschrieben..also weg damit..

Mfg.Attila Földes

Superhirn
13.10.2006, 19:36
Also ich schreib das immer etwa anders:


#include <avr/io.h>

uint8_t input = 0x00;

int main(void)
{
DDRB = 0xff; //Port B = Ausgang
DDRD = 0x00; //Port D = Eingang
while (1)
{
input = PIND; //Port D in input einlesen
PORTB = input; //input auf Port B ausgeben
}

return 0;
}

meine methode ist eben etwas anders. ich hab aber schon methoden die deiner ähnlich sind gesehen. doch return 0; solltest mal versuchen das ist vieleicht die lösung :) ich weis zwar das eigendlich nicht notwendig sein soll aber ich schreibs immer dazu.

und die interrupt.h brauchst du nicht da du keine interrupts nutzt.

hast schon versucht das in der while schleife als if schleife zu schreiben?

if (PIND!=0xFF)
{
PORTB==0xFF;
}
else
{
PORTB==0x00;
}

ist die hardware ok? hast schon probiert die led einfach mit PORTB = 0xff einzuschalten damit du weist das es wirklich geht?

meine lösungen sind vieleicht nicht für jedeen wirklich die lösung (da ich ja die probleme umgehe.....) hauptsache es geht. ;-)

Pascal
13.10.2006, 19:51
if (PIND=0xFF)
{
PORTB=0xFF
}
else
{
PORTB=0x00
}

Der code dürfte aber auch nicht wie gewünscht funktionieren.
1. bei PIND=0xFF findet nicht der wohl beabsichtigte Vergleich statt, sondern dem PIND wird der Wert 0xFF zugewiesen und da das dann ungleich 0 ist, ist das Ergebnis des "Vergleichs" immer true. das müsste fogliche so aussehen: PIND == 0xFF

2. soll PIND wirklich mit 0xFF verglichen werden? dann müsstest du ja alle acht Taster an dem Port(sofern da acht dran sind) drücken, um die LEDs anzuschalten

3. bei PORTB=0xFF und PORTB=0x00 fehlen die abschließenden Semikolons

Superhirn
13.10.2006, 20:00
also ich seh da keinen fehler :) :) :-) :-)

Jetzt is es ok. (außer die taster an portb sind nicht auf high aktiv).

grüße
thomas

Pascal
13.10.2006, 20:29
außer die taster an portb sind nicht auf high aktiv

Dazu kann ich nichts sagen, da ich kein STK500 habe.

izaseba
14.10.2006, 09:47
Ihr habt noch eine nette Kleinigkeit vergessen,
Pullups an den Tastern einzuschalten...
und die Variable muß nicht unbedingt global sein, mach sie in die main Funktion rein.

Gruß Sebastian