-
-
Neuer Benutzer
Öfters hier
-
Erfahrener Benutzer
Roboter Experte
Weil du _delay_ms nur mit einer Konstanten aufrufen darfst. Ansonsten muss die Umrechnung Zeit->Cycles zur Laufzeit gemacht werden, was die Floating-Point-Lib mit rein zieht.
Ohne die Zeile ist t konstant 10. Der Compiler ersetzt daher das "_delay_ms(t)" direkt durch "_delay_ms(10)". Mit der Zeile ist t nicht mehr konstant, und es macht Bumm.
-
Neuer Benutzer
Öfters hier
Verstehe ich. Wie müsste ich denn sowas machen damit es nicht "Bumm" macht.
Wäre es besser das delay in eine Schleife zu setzen und mit t die Anzahl
der Schleifen durchläufe zu ändern ?
Probier ich mal.
christoph
-
Neuer Benutzer
Öfters hier
Ja, ist gut 194 bytes.
------------------------------------------
while (z<t)
{
_delay_ms (20); // t ms warten
z++;
//PORTD = z;
}
z=0;
-------------------------------------------------------
Was kann ich denn machen, damit die Taster ständig abgefragt werden.
Es dauert doch bei einem langen Delay etwas bis eine Tasten Abfrage ausgeführt wird (was ja eigentlich klar ist delay dauert halt).
christoph
-
Erfahrener Benutzer
Robotik Einstein
Eine vernünftige Programmstruktur nehmen, die ohne längere delays auskommt.
Zum Beispiel: die Hauptschleife (bitte ohne goto!!!) wartet in jedem Durchlauf eine Milisekunde. Außerdem wird eine Variable (nennen wir sie cnt) hochgezählt. Nur wenn nun cnt>t geworden ist, wird das Lauflicht einen Schritt weitergeschaltet, und cnt auf Null gesetzt.
-
Erfahrener Benutzer
Roboter Genie
Timer benutzen!
Dafür sind die Dinger doch schließlich da 
Gruß,
askazo
-
Neuer Benutzer
Öfters hier
Ja, die Timer ...
die habe ich noch nicht so ganz in mich integriert !.
-
Erfahrener Benutzer
Robotik Einstein
kommt noch mit der zeit, statt C funktionen zu vergewaltigen, würde ich dir sowieso vorschlagen ein wenig mehr mit dem datenblatt zu arbeiten, einfach kapitelweise abarbeiten und jede funktion einmal durchprobieren, soweit möglich
wenn du die peripherie beherrschst, umgehst du zumeist probleme die durch umständliche softwarefunktionen entstehen
in deinem falle mal in die timer einarbeiten ^^
und deine Lauflichtfunktion benutzt du als ausgabe
PS: wenn du mit interrupts arbeitest, das "sei()" nicht vergessen um global die interrupts zu aktivieren, standardmäßig sie die aus bei programmstart
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen