mikrocontroller.net

Forum: Compiler & IDEs AtTiny45V hängt sich auf (ADC / PWM)


Autor: Marcus P. (marc2100)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
ich versuche mit dem AtTiny45V am Port B2 (ADC1) einen Poti einzulesen, 
und dann eine PWM auf dem Timer 0b (PB1) auszugeben.

Das ganze läuft auf 3,3V, und es funktioniert auch ca 10-20 Sekunden, 
danach hängt sich der Tiny einfach auf. Nach einem reset gehts wieder 
ein paar Sekunden.

Aref (PB0) ist auf 3,3V gelegt und per software auf extern geschaltet, 
Abblock-Cs sind drin und Pull-Up für Reset auch.

Wäre nett wenn mal jemand über das Programm schauen könnte, ich finde 
das Problem nicht

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum sich das aufhängen soll, erschließt sich mir nicht.
Allerdings ist manches etwas umständlich implementiert.  Wenn
du sowieso lückenlos den ADC anwerfen willst, warum dann das
umständliche Gepolle auf ADSC?  Schalt den free running mode
ein (ADATE-Bit), und gut ist's.  Den sleep-Mode muss man auch
nur einmal setzen und nicht immer wieder, und eigentlich selbst
das nicht einmal: IDLE ist ohnehin der default.

Damit könnte man die Funktion readADC1() entsorgen und main()
verkürzen zu:
int main(void)
{
  timer_inestellen();
  ADC_init();
  sei();

  // set_sleep_mode(SLEEP_MODE_IDLE);
  for (;;)
    sleep_mode();
}

Autor: Marcus P. (marc2100)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja wieso er sich daran aufhängt weiß ich ja auch nicht, ich dachte es 
liegt eventuell am Programm.

Zu den Verbesserung, stimmt so ist es besser, habe ich jetzt umgesetzt, 
aber hat leider noch den selben Fehler.

Dann muss ich mir die Hardware nochmal anschauen, danke

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Marcus P. schrieb:
> Ja wieso er sich daran aufhängt weiß ich ja auch nicht, ich dachte es
> liegt eventuell am Programm.
>
> Zu den Verbesserung, stimmt so ist es besser, habe ich jetzt umgesetzt,
> aber hat leider noch den selben Fehler.

Dann zeig noch einmal alles

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Entweder ADC-Interrupt oder auf ADC pollen. Beides geht nicht.
Das könnte Dein Fehler sein.

Nimm mal das Sleep Zeugs raus.
Mußt Du Strom sparen?

Den Timerinterrupt brauchst Du nicht. Du kannst direkt den PWM-Wert 
setzen.


Peter

Autor: Marcus P. (marc2100)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So ich hab mir die Hardware nochmal angesehen. Ich habe jetzt mal den 
Stabi durch eine 5V Version ersetzt, jetzt funktionierts.

Die Software wars wohl nicht, obwohl der Tiny45 ja eigendlich bei 3,3V 
bis 10MHz machen sollte...

Naja danke euch, das Ihr mal drübergeschaut habt.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter Dannegger schrieb:
> Entweder ADC-Interrupt oder auf ADC pollen. Beides geht nicht.

Doch, schon, auch wenn's nutzlos ist (wegen free running mode).
Er pollt ja nicht das ADIF sondern das ADSC, das geht schon.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jörg Wunsch schrieb:
> Doch, schon, auch wenn's nutzlos ist (wegen free running mode).

Free running beißt sich dann aber mit dem Sleep:

"Noise Reduction and Idle mode. To make use of this feature, the 
following procedure should be used:
• Make sure that the ADC is enabled and is not busy converting.
Single Conversion mode must be selected and the ADC conversion 
complete interrupt must be enabled.
• Enter ADC Noise Reduction mode (or Idle mode). The ADC will start a 
conversion once the CPU has been halted."


Peter

Autor: Marcus P. (marc2100)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Naja den sleep-modus hatte ich da schon reingemacht damit er
"Noise Reduction" bzw Idle macht, um störungen zu vermeiden.

Allerdings ist es bei meiner Anwendung jetz nicht kritisch weshalb bei 
mir auch der Free-Running Modus funktioniert.
Ich dachte ja zuerst auch das es was mit den Interrupts zu tun hat.

Anbei packe ich mal den Code der jetzt läuft, allerdings nur bei 5V, mit 
3,3V hängt er sich auf, warum auch immer.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter Dannegger schrieb:
> Free running beißt sich dann aber mit dem Sleep:

Das war mir gar nicht mehr in Erinnerung, dass er diesen Zirkus
auch beim IDLE sleep mode macht.

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.