Autor |
|
|
|
BID = 215976
ganse_lk009 Gerade angekommen
Beiträge: 12 Wohnort: Berlin
|
|
Hallo,
ich habe ein 40 Khz PWM Signal generiert und beim Debuggen mit AVR Studio schien alles in Ordnung. Wenn 8 Pulse gesendet werden hört mein Program auf Impulse zu senden, vorrausgesett PD4 würde gedrückt. Wenn ich das Program herunterlade sendet er beim Drücken von PD4 die ganze Zeit, also nicht nur 8 Pulse. Woran könnte das liegen?
Oder anders formuliert.
Ist es richtig, dass wenn ich die Interrupts deactiviere mit cli(), die PWM Signale PB5 und PB6 nicht erzeugt werden?
Als Drittes, kann man die erzeugten PB5 und PB6 Signale beim Simulieren in AVR studio sehen. Beim Simulieren bleiben sie LOW obwohl sie erzeugt werden(Das habe ich festgestellt nach Herunterladen des Programs auf Hardware).
#define MAX_PUL 8
SIGNAL (SIG_OVERFLOW1)
{
if (++pulse>MAX_PUL){
complete=1;
}
}
int main (void) {
//40 Khz Signal generieren
.....
for (;;) {
// Interupts do all
if ((PIND & (1<<PD4))) { //PD4 gedrückt
if (init) {
send=0;
complete=0;
init=0; }
}
if (!(send)) {
if (!(complete)) sei(); //Enable Int and Send Puls
else if (complete) {
TCNT1=0;
cli();
pulse=0;
}
}
}
return 0;
}
Grüsse
|
|
BID = 216067
photonic Schreibmaschine
Beiträge: 1301 Wohnort: Zürich, Schweiz
|
|
In dieser Betriebsart heissen die Outputpins nicht PBx sondern OCxy, das macht es etwas einfacher zu verstehen von welchem Timer sie stammen, etc., ohne dass man das Datenblatt nehmen muss. Pxy heissen die Dinger nur wenn an sie als General I/O nimmt.
Abschalten der Interrupts hat keinen Einfluss auf die Erzeugung von PWM-Signalen. Das entsprechende Register löschen das das Verhalten des Oututpins definiert hilft aber. TCNT1 auf 0 setzen bringt in diesem Fall auch wenig, da der Timer munter weiterläuft und du trotzdem keinen definierten Startwert hast für die nächste Pulssequenz. Wichtig ist dass du den Beginn der Sequenz mit einem overflow Interrupt triggerst um da timing sauber zu erhalten. So sollte es dann klappen.
Für die Tastendruck-Abfrage wäre eine einfache Entprellung nicht schlecht, sowas tun Taster immer. Um sagen zu können warum es weitersendet solange du den Finger draufhältst kann man so nicht sagen, der Teil des Sourcecodes der init auf 1 setzt ist nicht da...
P.S. Könntest du nicht die Ausrufezeichen im Subject weglassen, sieht irgendwie unprofessionell aus. Es wäre auch übersichtlicher, Fragen die offenbar ein und dasselbe Projekt betreffen nicht in vielen einzelnen Topics zu verteilen sondern in einen zu nehmen.
[ Diese Nachricht wurde geändert von: photonic am 6 Jul 2005 17:24 ] |
|
BID = 217242
ganse_lk009 Gerade angekommen
Beiträge: 12 Wohnort: Berlin
|
Hi,
ich habe immer noch eine Frage. Da ich micht immer die .hex Datei downloaden will um mein PWM Signal auf PB5 und PB6 anzuschauen, wie kann ich OC1A und OC1B in AVR Studio sehen, beim Simulieren?
Danke
|
BID = 217348
Jornbyte Moderator
Beiträge: 7178
|
Auf der rechten Seite I/O klicken, Timer öffnen.
_________________
mfg Jornbyte
Es handelt sich bei dem Tipp nicht um eine Rechtsverbindliche Auskunft und
wer Tippfehler findet, kann sie behalten.
|
BID = 218079
ganse_lk009 Gerade angekommen
Beiträge: 12 Wohnort: Berlin
|
Hallo,
Danke aber ich wollte eigentlich nicht die Werte des Output Compare Registers OCR1A und OCR1B sehen, die habe ich auf 1/2 ICR also 100 gesetzt damit der LOW Pegel genau so lang anliegt wie der HIGH Pegel.
Ich rede aber von OC1A und OC1B, die sind interne Signale,wo nach Vergleich mit den Output Registern ein 1 oder ein 0 erzeugt werden. Die werden dann auf PB5 und PB6 weiter verdrahtet. Ich würde mich interessiern ob ich diese Signale(OC1A und OC1B) in AVR Studio sehen kann?
Danke
|
BID = 218163
Jornbyte Moderator
Beiträge: 7178
|
Wenn du alles Richtig eingestellt hast, schaltet Portb5 (OC1A) und/oder Portb6 (OC1B), da ja der PinB5/6 nun diese Funktion haben.
_________________
mfg Jornbyte
Es handelt sich bei dem Tipp nicht um eine Rechtsverbindliche Auskunft und
wer Tippfehler findet, kann sie behalten.
|