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


von Marcus P. (marc2100)


Angehängte Dateien:

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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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:
1
int main(void)
2
{
3
  timer_inestellen();
4
  ADC_init();
5
  sei();
6
7
  // set_sleep_mode(SLEEP_MODE_IDLE);
8
  for (;;)
9
    sleep_mode();
10
}

von Marcus P. (marc2100)


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

von Karl H. (kbuchegg)


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

von Peter D. (peda)


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

von Marcus P. (marc2100)


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.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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.

von Peter D. (peda)


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

von Marcus P. (marc2100)


Angehängte Dateien:

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.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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.

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.