Guten Morgen, ich möchte am Pin PD0 einen kurzen Impuls haben. Dazu habe ich diesen Code geschrieben:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
Allerdings springt der PIN nach kurzer Zeit auf high und bleibt dann high. Was mache ich falsch?
|
Anzeige
|
Impuls auf Pin (AVR)Guten Morgen, ich möchte am Pin PD0 einen kurzen Impuls haben. Dazu habe ich diesen Code geschrieben:
Allerdings springt der PIN nach kurzer Zeit auf high und bleibt dann high. Was mache ich falsch? 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 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.
Gast
#1658072
Wie wärs mit dem ganzen Programm? Was hängt an dem PD0 denn dran? 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.
Gast
#1658098
Wie sieht die da aus? _delay_loop_1(1); Selbstgeschrieben? Wenn ja her damit! oh, die steht natürlich in <util/delay_basic.h> der avrlibc und ist natürlich auch includiert
Gast
#1658110
jetzt seh ichs:
while(0){
}
sollte
while(1){
}
heißen, da er sonst die Endlosschleife nie ausführt ;-)
Ok, aber dennnoch sollte ja der Impuls zu sehen sein, oder?
Gast
#1658152
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 ;-) Alles klar, probier ich zuhause gleich mal aus.
Gast
#1658760
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;
}
Ich habe früher viel mit FlexeLINT gearbeitet. Wenn ich mir die while(0)'s hier so betrachte, kapiere ich im Nachhinein, warum der für unendliche Schleifen einen for(;;) statt eines whiles sehen wollte ... Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|