www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Atmega 328P Software PWM


Autor: Noob (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Noob (Gast)
Datum:

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

Autor: Christopher G. (cbg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
DDRD?

Autor: Noob (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christopher G. (cbg)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Noob (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok. ich probier das mal. da hatte ich was falsch verstanden.

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

danke

Autor: Gast (Gast)
Datum:

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

Autor: Noob (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.