Impuls auf Pin (AVR)

OP #1657961
Lesenswert?

Guten Morgen,
ich möchte am Pin PD0 einen kurzen Impuls haben. Dazu habe ich diesen 
Code geschrieben:
1
#define PON PD0
2

3
DDRD |= (1 << PON);
4
PORTD |= (1 << PON);
5
_delay_loop_1(1);
6
PORTD &= ~(1 << PON);

Allerdings springt der PIN nach kurzer Zeit auf high und bleibt dann 
high.
Was mache ich falsch?
#1657984
Lesenswert?

Hi
Das kann nicht laufen, wenn das der ganze Code ist, soviel denke ich von 
C zu verstehen....
Vermutlich ist schon ein Flackern am Port, nur sehr schnell halt.....
Wie wär es, wenn das Programm in einer Schleife läuft?  Ich mein, so 
macht er das vermutlich auch, nur nicht nach Wunsch, sondern grad wie's 
ihm beliebt.... soll heißen, ich sehe keine Programmgrenze und daher 
läuft der µC ins Nirwana.
Gruß oldmax
OP #1658047
Lesenswert?

Das ist natürlich nicht der komplette code ;)

Dieser Block steht in der main funktion vor der Endlosschleife. Alle 
nötigen Header sind auch eingebunden. Das Programm kompiliert auch ohne 
Probleme. Der Chip hat mit gelöschtem Flash den Pin auf low. Dann 
programmiere ich den Chip über ISP und sehe am Oszi den Pegel von low 
auf high springen. Da bleibt er dann aber hängen.
OP #1658083
Lesenswert?

An dem Pin hängt ein 1k Widerstand gegen Masse und eben mein Oszi

Vom Programm ist weiter nichts übrig, habe alles auskommentiert, nur 
noch diese paar Zeilen.
1
#include <avr/io.h>
2

3
#define PON PD0
4

5
int main(void){
6

7
 DDRD |= (1 << PON);
8
 PORTD |= (1 << PON);
9
 _delay_loop_1(1);
10
 PORTD &= ~(1 << PON);
11

12
 while(0){
13

14
 } 
15
return 0;
16
}
Gast #1658152
Lesenswert?

Der Prozessor schaltet P0 an, dann wartet er kurz (wieviel eigentlcih?), 
dann schaltet er aus.
Dann läuft er an der Endlosschleife vorbei und fängt das Programm neu 
an.
Wird ein hochfrequentes Flackern sein, so dass je nach Wartezeit in dem 
Delay (Puls-Pausenverhältnis) die Low-Flanken untergehen.

Probiers mal aus, fall es nicht klappt will ich nen Schaltplan oder noch 
besser n Bild vom Aufbau ;-)
Gast #1658760
Lesenswert?

c is ja nich so mein ding, wenn ich das aber richtig interpretiert habe 
würde ich das so machen:


#include <avr/io.h>
#define PON PD0

DDRD |= (1 << PON);

int main(void){
 while(0)
 {
  PORTD |= (1 << PON);
  _delay_loop_1(1);
  PORTD &= ~(1 << PON);
  _delay_loop_1(1);
 }

return 0;
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren