Hallo
Ich hab ein Lauflicht programmiert welches immer von PD0-PD7 leuchtet
das hat auch geklappt allerding wollte ich danach ein Lauflicht welches
von PD7 nach PD0 leuchtet und dies klappt nicht und ich verstehe
überhaupt nicht wieso :(
Meine LEDS werden mit einer 0 eingeschaltet und mit 1 ausgeschaltet
#include <avr/io.h>
#include <util/delay.h>
void warte(){
_delay_ms(250);
}
int main (void) {
DDRD=0xFF;
PORTD=0xFF; //Alle LEDS ausschalten
int l;
while(1){
for(l=0; l<=8; l++){
warte();
PORTD&=~((l>>1));
warte();
PORTD=0xFF;
}
}
}
Also wenn mein l=0 ist dann habe ich doch vorgestellt da stehen
PORTD&=~((1000 0000));
daraus wird durch die Negierung 0111 1111 UND mit 1111 1111= daraus
folgt
0111 1111 ???
> PORTD&=~((l>>1));
Das kann auch nicht funktionieren:
PORTD &= ~( l >> 1); ist das gleiche wie
PORTD &= ~(0b00000001 >> 1); ist das gleiche wie
PORTD &= ~ 0b00000000; ist das gleiche wie
PORTD &= 0b11111111; ist das gleiche wie
PORTD = PORTD & 0b11111111; ist das gleiche wie
PORTD = PORTD;
Die Anweisung bewirkt also überhaupt nichts.
Azubi schrieb:> Also wenn mein l=0 ist dann habe ich doch vorgestellt da stehen> PORTD&=~((1000 0000));> daraus wird durch die Negierung 0111 1111 UND mit 1111 1111= daraus> folgt 0111 1111 ???
(0>>1) ist aber 0
Ich sehe gerade, das ist ja ein l statt einer 1. Man man, nimm doch
bitte für einen Schleifenzähler die Variable i, wie jeder andere auch.
Zu Deinem Problem: Du musst mit der Bitmaske 0b01111111 anfangen und sie
in jedem Schritt eine Stelle nach rechts schieben.
>(0>>1) ist aber 0
Ist auch gut so dann geht die LED an was mich bloß verwirrt ist
wenn man diese Anweisung PORTD&=~((l>>1)); durch diese ersetzt
PORTD&=~((1<<l)); macht der Controller einen schönes linksläufiges
Lauflicht das macht mir gerade meine Änfängerwelt kaputt
> Zu Deinem Problem: Du musst mit der Bitmaske 0b01111111 anfangen und sie
in jedem Schritt eine Stelle nach rechts schieben.
Das habe ich mir auch so gedacht:
wenn L=0 ist
dann habe ich ~(1000 0000)
wenn l=1
dann habe ich ~(0100 0000)
wenn l=2
dann habe ich ~(0010 0000)
usw.
meine Anweisung macht was ganz anderes
Azubi schrieb:> wenn man diese Anweisung PORTD&=~((l>>1)); durch diese ersetzt> PORTD&=~((1<<l));
Schön. Und was ist das jetzt?
Eins shift ieh oder ieh shift eins?
Mach das mal ordentlich. Das musst dir doch selber auffallen, daß das
Mist ist.
mfg.
Azubi schrieb:> l stand ursprünglich für LINKS ^^
Ach das ist gar kein ieh sondern ein ELL.
A. K. schrieb:> Wer eine Variable l nennt, der hat jedes Ergebnis verdient.
Mindestens.
mfg.
A. K. schrieb:> Wer eine Variable l nennt, der hat jedes Ergebnis verdient.
Das kommt davon, wenn man Code nicht mit [_code]..[_/code] tagged. Ohne
Syntax-high-lightning vertut man sich da schnell ;-)
Man verwendet keine Zeiche, die zum verwechseln ähnlich sind.
Es kann zwar sein, dass bei Deinem Zeichensatz eine Eins und ein Ell
eindeutig unterscheidbar sein. Im Forum gibt es aber arge
Schwierigkeiten.
Variablen müssen auch nicht so kurz wie möglich sein. Längere Variablen
kosten nur um Quellcode mehr Speicher, sonst aber nicht.
Eine Variable sollte auch die Funktion eindeutig beschreiben.
Azubi schrieb:>>(0>>1) ist aber 0>>> Ist auch gut so dann geht die LED an was mich bloß verwirrt ist>> wenn man diese Anweisung PORTD&=~((l>>1)); durch diese ersetzt>> PORTD&=~((1<<l));> macht der Controller einen schönes linksläufiges> Lauflicht das macht mir gerade meine Änfängerwelt kaputt
Das läßt vermuten, daß du keine Ahnung hast, was die Operatoren << und
>> eigentlich machen. Die erste Anweisung verschiebt l um 1 Bit nach
rechts, die zweite verschiebt eine 1 um l Bits nach links.
Azubi schrieb:>> Zu Deinem Problem: Du musst mit der Bitmaske 0b01111111 anfangen und sie> in jedem Schritt eine Stelle nach rechts schieben.>> Das habe ich mir auch so gedacht:>> wenn L=0 ist>> dann habe ich ~(1000 0000)
Nein. Wenn du eine 0 um ein Bit nach links schiebst, kommt wieder 0
raus.
Duda schrieb:> Man verwendet keine Zeiche, die zum verwechseln ähnlich sind.
Man verwendet zumindest beim Programmieren auch keinen Font, bei dem man
die nicht unterscheiden kann. Eigentlich sollte man solche Fonts am
besten gar nicht verwenden.
> Variablen müssen auch nicht so kurz wie möglich sein. Längere Variablen> kosten nur um Quellcode mehr Speicher, sonst aber nicht.>> Eine Variable sollte auch die Funktion eindeutig beschreiben.
Das hängt aber auch davon ab, wie groß der "scope" ist. Bei
Zählschleifen ist es gebräuchlich, solche Variablen nur ein Zeichen lang
zu machen und nicht etwa "laufvariable" oder "zaehler" zu nennen, da das
in dieser Situation zur Verständlichkeit des Codes nicht wirklich
beiträgt.
> Man verwendet zumindest beim Programmieren auch keinen Font, bei dem man> die nicht unterscheiden kann. Eigentlich sollte man solche Fonts am> besten gar nicht verwenden.
Nicht jeder kann 150% Sehschärfe anbieten. Dann ist der Font ziemlich
egal, es bleibt schlecht unterscheidbar.
Svenska schrieb:> Nicht jeder kann 150% Sehschärfe anbieten.
Wenn du die brauchst, um bei einem vernünftigen Font I, l und 1 zu
unterschieden, hast du die Schriftgröße zu klein eingestellt. Ich habe
bestimmt keine überragende Sehschärfe und trotzdem kein Problem damit.
> Dann ist der Font ziemlich egal, es bleibt schlecht unterscheidbar.
Richtig. Bei falschen Einstellungen ist der Font tatsächlich egal.
Rolf Magnus schrieb:> Wenn du die brauchst, um bei einem vernünftigen Font I, l und 1 zu> unterschieden, hast du die Schriftgröße zu klein eingestellt.
Sorry, 1 und l ist schlecht zu unterscheiden. Zumindest hier im Forum
(siehe Foto).
Ich stelle mir dafür auch keine Riesenbuchstaben ein.
A. K. schrieb:> Also bitte - heute gibts ordentliche Bildschirmauflösungen, da muss das> nicht so unscharf sein.
Ich vermute, daß das direkt in Originalgöße aus dem Browser heraus
kopiert war, damit man erkennt, wie's bei ihm aussieht. Mach ich einfach
auch mal so. Und bei dem Font hab ich kein Problem, die Zeichen zu
unterscheiden.
Ja, ist direkt aus dem Browser fotografiert. Angezeigt wird das Bild
hier aber in etwa zweifacher Höhe. Die Unschärfe ist wohl das
antialiasing.
A. K. schrieb:> Also bitte - heute gibts ordentliche Bildschirmauflösungen, da muss das> nicht so unscharf sein.
Full-HD auf 26". Font ist bei mir wohl Times 16. Schrifthöhe ist bei mir
3mm. Ja, ich mag es, wenn ich viel auf dem Bildschirm unterbringen kann.