-
        

Ergebnis 1 bis 8 von 8

Thema: Atmega8-16pu Programmierproblem

  1. #1

    Atmega8-16pu Programmierproblem

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Hallo,

    ich möchte euch mal um Hilfe bitten.
    Ich habe einen Atmega8-16pu, welcher mit 9,6 MHz getaktet ist.
    Nun wollte ich als Test 8 Leds nach einander im Zeitinterval von 1s schalten.
    Naja dies funktioniert nicht so richtig.
    Wenn ich einen Vorteiler von 1024 benutze , würd die schaltung sehr langsam.
    Wenn ich aber nur einen Teiler von 64 benutze, funktioniert es so etwa genau.

    (edit: mit 64 funtkioniert auch nur so langsam... )

    #include <avr/io.h>
    #include <io.h>
    #include <util/delay.h>

    int ATRoutine(void);


    /*int ATTimer16(unsigned char ucStart);
    int ATTimer8();
    int ATInput(unsigned char ucPortnumber, unsigned char ucIO);
    int ATOutPut
    */

    int ATRoutine(void)
    {
    unsigned char i = 0;
    unsigned int t = 0;
    unsigned char ucLumiMAX = 0;



    TCCR0 = (1<<CS02)+(1<<CS00);
    //TIFR |= (1<<TOV0);
    //TIMSK |= (1<<TOIE0);

    while(1)
    {

    if(TIFR & (1<<TOV0)) //* TimerOverflow
    {
    TIFR |= (1<<TOV0);
    t++;
    }

    if(t == 37)
    {
    t=0;
    PORTD = (1<<i);

    if(i == 7)
    {
    ucLumiMAX = 1;
    }

    if(i == 0)
    {
    ucLumiMAX = 0;
    }

    if(ucLumiMAX)
    {
    i--;
    }
    else
    {
    i++;
    }
    }
    }

    return 1;
    }

    int ATInitIO(void)
    {
    //* Ausgaenge
    DDRD = 0xff;
    PORTD = 0x00;

    //* Eingaenge
    DDRB = 0x00;
    PORTB = 0x00;

    return 1;
    }

    int main(void)
    {
    /* if(ATInitIO())
    if(!ATRoutine())
    {
    //* Fehlermeldung wenns Zyklus fehlerhaft war
    }
    else
    {
    //* Fehlermeldung wenns Init fehlerhaft war
    }*/
    TCCR0 = 0x05;
    ATInitIO();
    ATRoutine();

    return 0;
    }

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.08.2006
    Ort
    Budapest
    Alter
    30
    Beiträge
    563
    Ich verstehe dein Problem nicht so ganz...

    Hast du die Taktfrequenz im Program per #define F_CPU hinterlegt?

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    45
    Beiträge
    2.236
    Schon mal was von Code einrücken gehört ?
    Das kann doch kein Mensch lesen
    An F_CPU wird es wohl nicht liegen, weil er zwar die delay.h includet, aber nirgendwo nutzt (es sei denn ich bin blind)
    Ich denke mal, daß der µC mit internem Takt läuft...
    A ja,
    Code:
    TIFR |= (1<<TOV0);
    das ist falsch, es muß
    Code:
    TIFR = (1<<TOV0);
    heißen.
    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  4. #4
    Also das mit dem Einrücken liegt am Copy-Vorgang.
    Die F_CPU ist in der MAKEFILE mit eingebunden und wird über avrdude als Parameter an den Baustein geschickt.

    Ich selber geh aber auch davon aus das der immer auf internen standard takt läuft.
    Weil mit 1MHz und der ganzen Umrechnerei dazu sieht es funktionstüchtig aus.

    Danke für den Fund des Fehlers bei dem Bitoperator. Dürfte aber der Compiler ausgebessert haben, sprich kein semantischer Fehler. Zumindest ging es so auch irgendwie.

    Gruß Stev

  5. #5
    Moderator Roboter Genie
    Registriert seit
    26.08.2004
    Beiträge
    1.228
    Hi!
    Ich hab euch mal ins richtige Forum verschoben.

    MfG
    Basti

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    21.12.2004
    Alter
    33
    Beiträge
    165
    Zitat Zitat von StevB
    Also das mit dem Einrücken liegt am Copy-Vorgang.
    Code:
    Schreib deinen Code zwischen 
    Code:
     und

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.08.2005
    Alter
    33
    Beiträge
    685
    Zitat Zitat von fluchtpunkt
    Zitat Zitat von StevB
    Also das mit dem Einrücken liegt am Copy-Vorgang.
    Code:
    Schreib deinen Code zwischen 
    Code:
     und
    Aber ich muss sagen, dass es dadurch auch nicht immer korrekt eingeschoben wird.
    Erst wenn man den Text zB. in WINAVR kopiert, wird dieser richtig angezeigt...

    Liegt das an meinen Browser oder ist das normal?

    Gruß
    Stefan

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    21.12.2004
    Alter
    33
    Beiträge
    165
    liegt sicher teilweise daran das verschiedene Editoren Tabs anders interpretieren.
    Bei manchen entspricht ein Tab 4 Leerzeichen, manchmal 8, manchmal werden die Tabs komplett durch Leerzeichen ersetzt und so weiter

    Schaetz ich mal

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •