Forum: Compiler & IDEs Timer setzt PIN anstatt PORT


von Thomas G. (mrmp3)


Angehängte Dateien:

Lesenswert?

Hallo Leute,

Mir ist gerade etwas seltsames Aufgefallen. In einem aktuellen Projekt 
verwende ich den Timer1 im FastPWM Modus mit 10-Bit Auflösung. Die COM1x 
Register sind auf non-inverting eingestellt, sodass der Timer die Pins 
eigentlich bei erreichen des OCR1x Zählerstandes löschen müsste.

Im AVR Simulator wird aber immer nur das PIN-Bit beeinflusst und nie das 
PORT-Bit, in der reelen Schaltung funktioniert es ebenfalls nicht, es 
wird keine PWM erzeugt, obwohl ich den PORT mit (1<<x) auf High setzen 
kann.

Mir ist bereits bekannt das der FastPWM Mode mit dem AVR Studio 4.18 
nicht simuliert werden kann, ist das Verhalten ebenfalls ein Bug oder 
habe ich einen Denkfehler ?

MfG
Thomas

PS: Wenn die Anweisung zum löschen des PORT-Bits in die ISR geschreiben 
werden, funktioniert es.

von Stefan E. (sternst)


Lesenswert?

1
#include <avr/iom8.h>
Was hat das in deinem Code zu suchen?
Falls du dich dazu genötigt sahst, das hinzuzufügen um Fehlermeldungen 
zu beseitigen, dann hast du im Projekt den falschen Controller 
eingestellt. Und das wiederum kann dann der Grund für alle möglichen 
komischen Effekte sein.

von Thomas G. (mrmp3)


Lesenswert?

Ich war bisher eigentlich immer der Meinung, dass
1
#include <avr/io.h>
 und
1
#include <avr/iom8.h>
 sich nicht gegenseitig beeinflussen können, sofern im AVR Studio der 
richtige Controller gewählt ist. Sollte dies nicht der Fall sein, dann 
wird eigentlich auch eine Fehlermeldung ausgegeben.

Ich binde immer nur beide ein, um auch später noch am C-Code zu 
erkennen, welcher Controller verwendet wurde.

Aber die überflüssige Bibliothek hat mit dem Verhalten anscheinend nix 
zutun, funktioniert auch ohne die Lib nicht richtig.

von Peter D. (peda)


Lesenswert?

Thomas G. schrieb:
> Im AVR Simulator wird aber immer nur das PIN-Bit beeinflusst

Das sieht doch gut aus, die PWM geht also.

Thomas G. schrieb:
> und nie das
> PORT-Bit

Ist auch o.k.
Die PWM geht direkt auf den Ausgang, das Latch ist wirkungslos.


Peter

von Karl H. (kbuchegg)


Lesenswert?

Thomas G. schrieb:
> Ich war bisher eigentlich immer der Meinung, dass
>
>
1
#include <avr/io.h>
 und
1
#include <avr/iom8.h>
 sich nicht
> gegenseitig beeinflussen können, sofern im AVR Studio der richtige
> Controller gewählt ist.

Sofern der richtige Controller eingestellt ist, ist das ganze
1
#include <avr/iom8.h>
unnötig. Es dient nur dazu, dass du bei einem Port auf einen anderen 
Prozessor maximal viele Fehler beheben musst.

> Ich binde immer nur beide ein, um auch später noch am C-Code zu
> erkennen, welcher Controller verwendet wurde.

Schreibs in einen Kommentar rein.

von Bronco (Gast)


Lesenswert?

Thomas G. schrieb:
> Mir ist bereits bekannt das der FastPWM Mode mit dem AVR Studio 4.18
> nicht simuliert werden kann, ist das Verhalten ebenfalls ein Bug oder
> habe ich einen Denkfehler ?

Guckst Du Datenblatt, Kapitel "I/O Ports" und dort "Alternate Port 
Functions":

Wenn Du den Portpin nicht als "General Purpose I/O", sondern als PWM 
verwendest, wird "PVOExn" aktiv, d.h. das Signal, das den physikalischen 
Ausgang steuert, wird nicht mehr von PORT-Register gesteuert, sondern 
eben vom PWM-Modul.
Das PORT-Register-Bit wird dann nicht verwendet.
PIN geht natürlich mit dem PWM-Signal mit, denn das ist ja der 
zurückgelesen Zustand des phyiskalischen Ausgangs.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.