avr eifaches Programm mit Registern TCCR1A, umsetzen

Gast #5074729
Hi,
bin absoluter Neuling in dem Bereich und wäre um Hilfe dankbar. Und zwar 
hätte ich eine Aufgabe zu lösen.
Folgendes Programm ist gegeben:

#include <avr/io.h>
int main (void)
{
    int i = 0xFF;
    while(1)
    {
    while(i>0)
    {
        DDRC = 0xFF;
        PORTC = i;
       i--;
       _delay_ms(600);
    }
    }
}

Soweit ich das beurteilen kann (oder verstanden habe) müssten erst alle 
LEDs an sein und alle 600 ms eine abgeschaltet werden.
Nun würde ich gerne das selbe Ergebnis mithilfe folgender Register 
bekommen: TCCR1A, TCCRB1B und TCNT1. Habe mir zwar schon ein paar 
Beispiele für diese Timer angesehen doch werde daraus nicht schlau. Wie 
müsste das Programm ausschauen?
Vielen Dank schon mal.
Gast #5074753
Max F. schrieb:
> Nun würde ich gerne das selbe Ergebnis mithilfe folgender Register
> bekommen: TCCR1A, TCCRB1B und TCNT1. Habe mir zwar schon ein paar
> Beispiele für diese Timer angesehen doch werde daraus nicht schlau. Wie
> müsste das Programm ausschauen?

Trollig :-)
Gast #5074783
Max F. schrieb:
> Und zwar
> hätte ich eine Aufgabe zu lösen.

Ja - DU - und Du kannst mir gerne noch weitere Minus-Punkte geben - die 
stören mich nicht :-)

Schau Dir bitte das Tutorial an und arbeite Dich durch. Mag sein, dass 
Dir hier irgend jemand etwas vorkaut - aber das hilft Dir nicht 
wirklich.
Gast #5074822
Irgendwer schrieb:
> Nö, überlege noch mal genauer was passiert wenn du von 0xFF auf Null
> runterzählst.
... und mit einer int-Variable bei 0xFF anfängst ...


> Und ab den zweiten Durchlauf ist dein Programm sowieso murks.
schon von Anfang an, 0xFF ist immer kleiner Null.
Gast #5074892
Ohne

#include <avr/delay.h>

ist es sicher nicht lauffähig (-3 mindestens - bitte :-))

Der Rest ist aus genannten Gründen Unsinn (das ist mindesten -4 wert!) 
:-)
#5075147
Hi

Walter S. schrieb:
> ein int beim avr hat doch 16 Bit?!

Wäre mir neu, wobei ich mich mit C nicht sonderlich auskenne.
Worauf wohl hinaus gegangen werden wollte - es gibt die Bytes als mit 
und ohne Vorzeichen (signed).
Ohne Vorzeichen kann ein Byte 0...255 als Wert haben.
Mit Vorzeichen -128...127, wobei das oberste Bit das Vorzeichen 
darstellt - und bei 0xFF ist das oberste Bit gesetzt, somit der Wert 
negativ (wenn Du Das nicht willst, musst Du die Variable mit uint8 
(unsigned integer 8 bit ... denke ich - wobei C auch längere Zahlen 
zulässt, was aber Nichts mit den Interner des µC zu tun haben muß, darum 
kümmert sich, zur Not, der Compiler) definieren.

Aber auch dann gehen die 'ganzen LED' nicht der Reihe nach aus - wäre 
auch blöd, da halt nur 8 LED vorhanden sind (8 Bit) - dafür blinken 
Diese dann schön hin und her, bis denn Alle doch aus sind (nach 255 
Schritten)

Du musst übrigens nicht bei jedem Schleifendurchlauf das 
Richtungsregister neu auf 0xFF setzen - Das ändert sich nur, wenn Du Das 
änderst - von Selbst passiert da gar nix.

MfG

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.