-         

Ergebnis 1 bis 5 von 5

Thema: AVR: Ausgaenge invertiert?, Timer?

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    03.01.2004
    Ort
    Pottenstein
    Alter
    38
    Beiträge
    265

    AVR: Ausgaenge invertiert?, Timer?

    Anzeige

    Moin moin,

    Ich experimentiere gerade mit einem ATMega8. Ich will auf PORTC die vier Bits an einen Schrittmotortreiber geben, aber irgendwie spinnt der Port. Wenn ich mein Programm

    Code:
    #include <avr\io.h>
    #include <avr\interrupt.h>
    #include <avr\signal.h>
    
    #define S0 0x0D
    #define S1 0xD0
    #define S2 0x07
    #define S3 0x70
    
    volatile unsigned char dir=0,s=0;		// Volatile, damit die Interrupt-Routine Zugriff hat
    
    SIGNAL(SIG_OVERFLOW0) {						// Schritt vorwaerts (mit ca 4Hz)
    	if(dir==1) {
    		if(s==0) s=1;
    		if(s==1) s=2;
    		if(s==2) s=3;
    		if(s==3) s=0;
    	}
    	if(dir==0) {
    		if(s==0) s=3;
    		if(s==1) s=0;
    		if(s==2) s=1;
    		if(s==3) s=2;
    	}
    }
    
    int main(void) {
    	DDRB=0x00;
    	DDRC=0xFF;
    	TCCR0=0x05;								// Prescaler = Interner Takt / 1024
    	dir=1;									// Motor erstmal nur linksherum drehen
    	s=0;									// In Position 0 anfangen
    	
    	sei();									// Interrupts einschalten
    	while(1) {
    		switch(s) {						// Je nach aktueller Position entsprechende Bits setzen
    			case 0: PORTC=S0; break;
    			case 1: PORTC=S1; break;
    			case 2: PORTC=S2; break;
    			case 3: PORTC=S3; break;
    		}
    	}
    }
    so lade und den Port erstmal an die LEDs auf dem STK500 anschliesse, dann gibt das anscheinend ein Zufallsmuster, bei dem sich aber nichts bewegt.
    Ich hab dann mal probeweise PORTC auf 0xFF gesetzt: Alle LEDs gehen aus. PORTC auf 0x00: Alle LEDs gehen an. Ist das nicht genau verkehrtherum? Ich habe nirgendwo gefunden, dass der AVR die Ausgaenge invertiert.

    Aber selbst wenn ich das so akzeptiere und meine ausgegebenen Bits entsprechend invertiere, gibt das nix sinnvolles.

    Also Fragen an die AVR-Freaks:
    - Muss man den Timer noch irgendwie starten oder laeuft der los, sobald ich TCCR0 vom default 0x00 auf 0x05 stelle?
    - Muss ich mit dem PORTC noch irgendwas besonderes machen, bevor ich ihn normal benutzen kann? Ich hab hier Forum schon oefter was ueber JTAG gelesen, aber wenn ich mir die Fuses in AVR Studio (damit programmiere ich) anschaue, seh ich da nirgendwo den Begriff JTAG...

    Kann jemand helfen?

    Nils

    PS: Nicht ueber die Werte fuer die defines wundern, ich muss wegen der Anornung des Ports auf dem STK jeden zweiten Pin des Bytes nehmen und habe wie gesagt alle Bits invertiert...

  2. #2
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    03.01.2004
    Ort
    Pottenstein
    Alter
    38
    Beiträge
    265
    OK, das "Zufallsmuster" kam durch meine Daemlichkeit. Wenn ich alle Bits invertiere, muss ich natuerlich bei den defines statt 0x02 auch 0xFD schreiben und nicht 0x0D...

    Bleiben die Fragen: Warum sind die Ausgaenge des AVRs bei logisch 1 auf 0v und bei logisch 0 auf 5V, und wieso laeuft der Timer0 nicht los?

  3. #3
    Gast
    Hallo

    Um den Overflow1 Int benutzen zu können, mußt du im TIMSK Reg. noch ein Bit setzen. Der Timer läuft los, sobald er mit einem Takt versorgt wird.

    MFG
    Dieter

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    18.09.2004
    Ort
    Waldsee
    Alter
    32
    Beiträge
    44
    Der mega 8 invertiert deine ports nicht das macht das stk 500 led an ist logisch low und umgekehrt

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    03.01.2004
    Ort
    Pottenstein
    Alter
    38
    Beiträge
    265
    Nabend,

    Besten Dank fuer die Antworten!
    Das mit dem TIMSK war genau das, was mir fehlte. Und das mit den LEDs auf dem STK war ich gerade am nachmessen, mein Schrittmotor konnte naemlich mit den invertierten Signalen nix anfangen
    Nils

Berechtigungen

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