Was steckt denn hinter dem define PIND1 ?
Wenn PORTB per Bit-Maskierung statt PORTB1 angesprochen werden muss, dann wundert es mich, dass es für die Eingänge mit PINn gehen soll.
Der gcc braucht die Bit-Maskierungen auf jeden Fall, der kennt kein PIND1.
Und Codevision wiederum kann alle Port- und Pin-Bits in der Form PORTB.0, PINB.0, etc. ansprechen.
Hast Du den richtigen Eingang? Es fängt immer bei 0 an, nicht bei 1.
Welchen compiler/IDE benutzt Du?
Test-Board für erste µC-Projekte korrekt?
Moderator: T.Hoffmann
- CRI 93+ / Ra 93+
- Auserwählter

- Beiträge: 2801
- Registriert: So, 19.10.08, 23:56
- Wohnort: Hannover
ja hab ich.
Wir benutzen AVR Studio!
Edit: So ich warte bis die Bücher da sind, und lass mich von 0 an leiten mit dem Buch. Das ist für mich noch alles zu "verwirrend"
Aber trotzdem vielen Dank für eure große Mühe und Geduld mit mir!
Wir benutzen AVR Studio!
Edit: So ich warte bis die Bücher da sind, und lass mich von 0 an leiten mit dem Buch. Das ist für mich noch alles zu "verwirrend"
Aber trotzdem vielen Dank für eure große Mühe und Geduld mit mir!
Code: Alles auswählen
if ( PIND & 0x01 ) { // Der Inhalt von PIND wird mit 1 "UND" verknüpft
//Hier kommt der Code rein, der ausgeführt werden soll wenn PIND0 den Wert 1 hat
}else{
//Hier kommt der Code rein, der ausgeführt werden soll wenn PIND0 den Wert 0 hat
}
Gruß Flo
Zuletzt geändert von stromflo am Mi, 26.01.11, 18:48, insgesamt 1-mal geändert.
- CRI 93+ / Ra 93+
- Auserwählter

- Beiträge: 2801
- Registriert: So, 19.10.08, 23:56
- Wohnort: Hannover
Ich hab' AVRStudio hier jetzt nicht installiert (nur bei der Arbeit), aber AFAIR ist PIND1 lediglich ein Define mit Bit 1 auf high, allen anderen auf 0, also z.B. so:
#define PIND1 (1<<1)
oder so:
#define PIND1 0b00000010
Wenn man das abfragt, kommt natürlich *IMMER* 1 bzw. true raus. Wie es korrekt gemacht wird steht ja weizter oben schon, fiel mir nur gerade als Erklärung noch ein.
#define PIND1 (1<<1)
oder so:
#define PIND1 0b00000010
Wenn man das abfragt, kommt natürlich *IMMER* 1 bzw. true raus. Wie es korrekt gemacht wird steht ja weizter oben schon, fiel mir nur gerade als Erklärung noch ein.
Ja schon klar, wobei es hier in einem Kommentar verwendet wurde und nicht im C-Quellcode. --> beeinträchtigt nicht den QuellcodeCRI 93+ / Ra 93+: In C muss ein Vergleich immer mit ZWEI == erfolgen, sonst ist es eine Zuweisung Vergleich ob das Ergebnis != 0 ist. Also Vorsicht!![]()
Ich muss gestehen, dass ich in Kommentaren nicht immer 100% C-konform arbeite, das kommt vielleicht auch daher, dass ich früher viel Basic programmiert habe... Die Kommentierung ist eh sau blöde ausgedrückt.... hab das mal geändert....
Gruß Flo
So, so langsam machen wir gute fortschritte. ABER: Wir stehen grad bei der Servoansteuerung, und bekommen es einfach nicht hin, dass sich der Servo in beide Richtungen dreht. Er dreht ständig stur nach links. (Das macht er bei zwei Servos, wobei bei einem die Poti-Stange gekürzt is, und der andere noch komplett original is).
Könnt ihr mir da weiter helfen. Hier ist ma der Code, nach dem er ja eigentlich still stehen sollte. Aber egal wir wir das erste delay ändern, er dreht stru nach links!!
Danke schon ma im voraus!
Könnt ihr mir da weiter helfen. Hier ist ma der Code, nach dem er ja eigentlich still stehen sollte. Aber egal wir wir das erste delay ändern, er dreht stru nach links!!
Danke schon ma im voraus!
Code: Alles auswählen
#include <avr/io.h>
#define F_CPU 1000000L
#include <util/delay.h>
int main (void)
{
DDRB |= (1<<PB2);
while(1)
{
PORTB |= (1<<PB2);
_delay_ms(1.5);
PORTB &= ~(1<<PB2);
_delay_ms(20);
}
return 0;
}


