Forum: Mikrocontroller und Digitale Elektronik Atmega 328P Software PWM


von Noob (Gast)


Lesenswert?

boolean currentState;

ISR(TIMER1_OVF_vect){
    currentState = !currentState;
    PORTD = currentState<<7;  //Toggelt PIN 7
}

void setup(void) {
  currentState = LOW;
//**********Timer1***********************

TCCR1A = 0<<COM1A1 | 0<<COM1A0 | 0<<COM1B1 | 0<<COM1B0 | 0<<WGM11 | 
0<<WGM10; //Setzt Timer1 auf NormalOperationMode
TCCR1B = 0<<ICNC1 | 0<<ICES1 | 0<<WGM13 | 0<<WGM12 | 0<<CS12 | 0<<CS11 | 
1<<CS10;  //Prescaler auf x1 sonst alles auf Normal
TCCR1C = 0;  //Keine Advanced-Einstellungen
TIMSK1 = 1<<TOIE1;  //Interrupt Enable für Timer 1
//***************************************
}

void loop(void) {
}

Das ganze ist mit der Arduino-IDE geschrieben.
Timer1 ist ein 16bit Counter. Atmega328P läuft mit 16MHZ. => Pro Sek. 
ca. 244 Overflows.
Mein Problem ist jetzt:
Wenn ich mein Messgerät (Voltcraft VC140) dranhänge, dann seh ich keine 
feste Spannung. Er zählt hoch und zwar etwa 10mV pro Sek. aber das recht 
kontinuierlich. Allerdings geht er auch tw. kurz wieder runter. Die 
grobe Richtung ist aber nach oben.

Woran liegt das? Was mach ich falsch?

gruß und danke

von Noob (Gast)


Lesenswert?

Übrigens ist die Spannung konstant, wenn ich analogWrite() benutze.
Das ist quasi Hardware-PWM.

von Christopher G. (cbg)


Lesenswert?

DDRD?

von Noob (Gast)


Lesenswert?

Es stehen alle Pins auf OUTPUT per default.
Sonst dürfte ich ja auch gar nichts sehen am Messgerät, oder?

Es ist außerdem so: Wenn ich den Prescaler geeignet wähle, toggelt PIN7 
einmal in 4 Sekunden. Das kann ich auch gut mit meinem Messgerät 
nachvollziehen.

Kann es sein, dass es am Messgerät liegt. D.h., dass die Freq. "zu 
niedrig" ist für das Messgerät.

Mit "HardwarePWM" zeigt es ja wie gesagt den richtigen Wert an...

Danke trotzdem für die Hilfe

von Christopher G. (cbg)


Lesenswert?

Wieso schaust du nicht einfach ins Datenblatt?
Ich schätze mal, dass beim Atmega328P die Pins standardmäßig auch auf 
Input sind (High-Z).
Das was du misst wird die Spannung sein, die durch den getoggelten 
Pull-Up anliegt.
Ein Voltmeter ist kein geeignetes Messgerät für Signale. Hast du keinen 
Zugang zu einem Oszi? Selbst dort bleibt aber ein versehentlicher Input 
statt Output unbemerkt, da das Oszi einen hochohmigen Eingang hat.

von Noob (Gast)


Lesenswert?

ok. ich probier das mal. da hatte ich was falsch verstanden.

leider hab ich kein oszi. und auch keine 400€ :-)

danke

von Gast (Gast)


Lesenswert?

Nen Widerstand und ein Multimeter reicht für die Analyse ob Tristate, 
High oder Low völlig aus.

von Noob (Gast)


Lesenswert?

sry wg. meiner ignoranz.
jetzt klappt's nämlich.

warum genau geht da bei pins auf INPUT die spannung langsam hoch?
das würd mich interessieren.


danke nochmal für die hilfe!

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.