ATtiny45 Programmierfehler?

#6542432
Lesenswert?

Hallo zusammen,
Endlich  konnte ich die damit erzeugte .hex in den ATtiny45 mit Ponyprog 
laden, aber der MC macht nix. (Die H-Brücke besteht aus 4 NPN, die einen 
Scheibenwischermotor ansteuern):

/*
  Servosteuerung:
Differenz-analogwert an Pin3 ermitteln und Transistoren einer H-Brücke 
entsprechend mit Softstart ansteuern und durch kurzschließen abstoppen.
*/

int Wert; // Variable für den Analogwert
byte T = 0;

void setup()
{

  pinMode( 0, OUTPUT);
  pinMode( 1, OUTPUT);
  pinMode( 2, OUTPUT);
  pinMode( 4, OUTPUT);
  pinMode( 3, INPUT);
}

void loop()
{
  noch:
  Wert = analogRead(3);
  if (Wert > 130)
  { if (T = 255)
    (T = T + 1);
    digitalWrite( 0, LOW);
    digitalWrite( 1, HIGH);

    delay(T);

    digitalWrite( 0, LOW);
    digitalWrite( 1, LOW);

    delay(255-T);
    goto noch;
  }

  if (Wert < 120)
  {
    T = T + 1;
    digitalWrite( 2, LOW);
    digitalWrite( 4, HIGH);

    delay(T);

    digitalWrite( 2, LOW);
    digitalWrite( 4, LOW);

    delay(255-T);
    goto noch;
  }
    digitalWrite( 2, HIGH);
    digitalWrite( 4, HIGH);
    T = 0;
}


Das ist mein erster Versuch mit ATtiny ( bisher PIC )

Ist da was falsch?

Gruß
Helle
Gast #6542439
Lesenswert?

Helmut H. schrieb:
> if (T = 255)
>     (T = T + 1);

Das Gleich-zeichen ist eine Zuweiseung. Hier setzt du T auf der Wert 255 
und die Bedingung ist immer wahr, weil der Wert nicht 0 ist.

Du musst "if (T==255)" schreiben.

Dann erkläre mal, warum du danach zu dem Byte mit dem Wert 255 eine 1 
addierst. Setze es doch gleich auf 0.

Warum setzt du an Ende der loop T=0? So kann der Wert niemals 
fortlaufend hoch gezählt werden. Überlege dir nochmal ganz genau, wann 
du T hochzählen willst und ob du es überhaupt auf 0 setzen musst.

Auf das goto solltest du besser verzichten. Das kannst du mit Schleifen 
ordentlicher lösen.

Wenn du das nächste mal fragst, was in deinem Programm falsch ist, dann 
gewöhne dir an, es zu kommentieren und zu erklären was es tun soll. Hier 
ist ziemlich unklar, was du beabsichtit haben könntest.

Um das Ergebnis zu prüfen, besorge dir einen Debugger oder wenigstens 
einen Logic Analyzer.
Gast #6542445
Lesenswert?

Richtig Einrücken wäre auch hilfreich, das der Quelltext lesbar wird. Je 
schwerer du es den Helfern machst, umso weniger Hilfe wirst du bekommen.

Um PWM Signale zu erzeugen, benutzt man bei Arduino normalerweise die 
Funktion analogwrite().

Es fehlt der Schaltplan, man kann so gar nicht erkennen, welcher Ausgang 
welchem Zweck dient.
#6542456
Lesenswert?

Stefan ⛄ F. schrieb:
> Helmut H. schrieb:
>> if (T = 255)
>>     (T = T + 1);
>
> Das Gleich-zeichen ist eine Zuweiseung. Hier setzt du T auf der Wert 255
> und die Bedingung ist immer wahr, weil der Wert nicht 0 ist.
>
> Du musst "if (T==255)" schreiben.
>
> Dann erkläre mal, warum du danach zu dem Byte mit dem Wert 255 eine 1
> addierst. Setze es doch gleich auf 0.
>
> Warum setzt du an Ende der loop T=0? So kann der Wert niemals
> fortlaufend hoch gezählt werden. Überlege dir nochmal ganz genau, wann
> du T hochzählen willst und ob du es überhaupt auf 0 setzen musst.
>
> Auf das goto solltest du besser verzichten. Das kannst du mit Schleifen
> ordentlicher lösen.
>
> Wenn du das nächste mal fragst, was in deinem Programm falsch ist, dann
> gewöhne dir an, es zu kommentieren und zu erklären was es tun soll. Hier
> ist ziemlich unklar, was du beabsichtit haben könntest.
>
> Um das Ergebnis zu prüfen, besorge dir einen Debugger oder wenigstens
> einen Logic Analyzer.

Danke,
ich kenne eben nur ein wenig Basic, daher die Frage hier.
Gut, ich gehe an mir arbeiten...

Helle
(Firma: Frickelhauptquartier) #6542505
Lesenswert?

" if (T = 255)
    (T = T + 1); "

Typischer Anfänger/Flüchtigkeitsfehler; passiert mir auch gelegentlich, 
und der Compiler meckert nicht... Ungleich bedeutet übrigens "!=", nicht 
wie in BASIC "<>". Für "T=T+1" (auch wieder BASIC) kannst du auch "T++" 
schreiben. Damit wird T um eins erhöht, T-- funktioniert auch.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren