INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Bremst ein int ?
02.06.2016, 21:54 (Dieser Beitrag wurde zuletzt bearbeitet: 02.06.2016 21:55 von Mathias.)
Beitrag #1
Bremst ein int ?
Ich habe 2 ShiftOut geschrieben, einmal für 16Bit und der andere für 8Bit.
Mit Shift Out, werden 3 74HC595 angesteuert.
Code:
void shiftOut8(char dataPin, char clockPin, unsigned char val) {

    for (char i = 0; i < 8; i++) {

        if (!!(val & (1 << (7 - i)))) {
            PORTD |= (1 << dataPin);
        } else {
            PORTD &= ~(1 << dataPin);
        }

        PORTD |= (1 << clockPin);
        PORTD &= ~(1 << clockPin);
    }
}

void shiftOut16(char dataPin, char clockPin, unsigned int val) {

    for (char i = 0; i < 16; i++) {

        if (!!(val & (1 << (15 - i)))) {
            PORTD |= (1 << dataPin);
        } else {
            PORTD &= ~(1 << dataPin);
        }

        PORTD |= (1 << clockPin);
        PORTD &= ~(1 << clockPin);
    }
}

Wen ich diese mit einem 16Bit Shift laufen lassen, ist sie komischerweise langsamer, als wen ich 2 mal einen 8Bit-Shift mache (der auskommandierte Teil,).

Braucht der Atmega so viel Zeit mehr, wen er 16Bit verarbeiten muss ?

Code:
void multiplex() {

    static unsigned char c = 0;
//    unsigned char d[2];
//    if (c >= 8) {
//        d[0] = 0;
//        d[1] = 1 << (c - 8);
//    } else {
//        d[0] = 1 << c;
//        d[1] = 0;
//    }

    PORTD &= ~(1 << latchPin);
    shiftOut8(dataPin, clockPin, ~digit[c]);
    shiftOut16(dataPin, clockPin, 1 << c);

//    shiftOut8(dataPin, clockPin, d[1]);
//    shiftOut8(dataPin, clockPin, d[0]);
    PORTD |= (1 << latchPin);

    c += 1;
    if (c == maxSegment) {
        c = 0;
    };
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.06.2016, 12:33
Beitrag #2
RE: Bremst ein int ?
Hallo Mathias,

die Assembler - Codes der Funktionen sind schon verschieden, Shift16 braucht ein paar Instruktionen mehr und die sind dann auch etwas aufwändiger.
Welche Instruktionen wieviel Maschinenzyklen brauchen findet man hier: http://www.atmel.com/webdoc/avrassembler..._list.html
Die Assembler - Code im Anhang.
Grüße Ricardo


Angehängte Datei(en)
.txt  shift.txt (Größe: 4,04 KB / Downloads: 20)

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.06.2016, 17:43 (Dieser Beitrag wurde zuletzt bearbeitet: 03.06.2016 17:43 von Mathias.)
Beitrag #3
RE: Bremst ein int ?
Der Assembler-Code sieht schon einiges anders aus als von einem 8088er.
Vor allem die Register sin total anders, kein AX, BX, etc.
Ich sehe nur R??, anstelle von Register oder von DS:[1234].

Bei Gelegenheit, werde ich mir mal den Atmega-Assembler genauer angucken.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.06.2016, 19:41
Beitrag #4
RE: Bremst ein int ?
(03.06.2016 17:43)Mathias schrieb:  Der Assembler-Code sieht schon einiges anders aus als von einem 8088er.
Vor allem die Register sin total anders, kein AX, BX, etc.
Ich sehe nur R??, anstelle von Register oder von DS:[1234].

Bei Gelegenheit, werde ich mir mal den Atmega-Assembler genauer angucken.

...das liegt mitunder daran das der 8088 ein 16Bit Prozessor ist und der Atmega ein 8Bit Derivat.
Demzufolge kann der Atmega mit einem 16Bit Shift nicht direkt dienen...da müßen dann die Status Flags mitverarbeitet werden um das Ergebnis im anderen 8Bit Register wieder einfliesen lassen zu können...das sind einfach mehr Befehle wo da abgearbeitet werden müßen.
lgbk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Midi Bibliothek bremst Stepper aus? Brauche Programmiertipp arduzo 3 2.474 28.08.2013 11:07
Letzter Beitrag: Stefan

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste