Test-Board für erste µC-Projekte korrekt?

Fragen zu Schaltungen, Elektronik, Elektrik usw.

Moderator: T.Hoffmann

Benutzeravatar
CRI 93+ / Ra 93+
Auserwählter
Auserwählter
Beiträge: 2801
Registriert: So, 19.10.08, 23:56
Wohnort: Hannover

Di, 25.01.11, 16:43

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?
BlackHawk
User
User
Beiträge: 30
Registriert: Mo, 10.01.11, 19:08
Wohnort: Braunschweig

Di, 25.01.11, 17:24

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!
stromflo
Mega-User
Mega-User
Beiträge: 304
Registriert: Mi, 31.12.08, 12:16

Di, 25.01.11, 19:23

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
}
Du solltest aber auch noch über eine Entprellung der Taster nachdenken!

Gruß Flo
Zuletzt geändert von stromflo am Mi, 26.01.11, 18:48, insgesamt 1-mal geändert.
BlackHawk
User
User
Beiträge: 30
Registriert: Mo, 10.01.11, 19:08
Wohnort: Braunschweig

Mi, 26.01.11, 09:54

DANKEEEEEEEEEEEEEEEEEEEEEEEEEEE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

und natürlich auch an alle anderen DANKEEEEE!!!!!


:D :D
Benutzeravatar
CRI 93+ / Ra 93+
Auserwählter
Auserwählter
Beiträge: 2801
Registriert: So, 19.10.08, 23:56
Wohnort: Hannover

Mi, 26.01.11, 17:01

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.
stromflo
Mega-User
Mega-User
Beiträge: 304
Registriert: Mi, 31.12.08, 12:16

Mi, 26.01.11, 18:46

CRI 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! ;-)
Ja schon klar, wobei es hier in einem Kommentar verwendet wurde und nicht im C-Quellcode. --> beeinträchtigt nicht den Quellcode :) . Sicherlich ist es sauberer wenn man hier dann die zwei == macht, weils ja eigentlich ein Vergleich ist..... Dies ist mir auch bekannt.
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
BlackHawk
User
User
Beiträge: 30
Registriert: Mo, 10.01.11, 19:08
Wohnort: Braunschweig

Mo, 07.02.11, 15:04

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!

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;
}
Antworten