-         

Ergebnis 1 bis 8 von 8

Thema: Schrittmotor einzelne Steps mit Taster

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    29.05.2013
    Beiträge
    6

    Schrittmotor einzelne Steps mit Taster

    Anzeige

    Hallo.
    Da das mein erster Post in diesem Forum ist stelle ich mich einmal vor.
    Mein Name ist Daniel. Ich komme aus Österreich. Ich beschäftige mich schon seit einigen Jahren mit Elektronik und Hochspannung.
    Vor einigen Tagen hab ich angefangen einen Atmega 8 in C zu programmieren. Angefangen hab ich mit blinkenden LEDs, Lauflichtern etc.
    Jetzt hab ich versucht einen Schrittmotor anzusteuern, was auch funktioniert hat. Ich hab einen bipolaren Stepper der von 2 Vollbrücken aus BD139 angesteuert wird.
    Mit ein paar zusätzlichen Schleifen kam dann sowas dabei raus: http://www.youtube.com/watch?v=aA6cN2mLKbQ

    Jetzt will ich aber ein Programm das mir pro Tastendruck (Taster an PORTC.0 an +5V, Pulldown 10k gegen GND) und später dann pro Puls aus einer anderen Schaltung den Motor um 1 Step weiterdreht. Ich habs mal mit switch case versucht aber es geht nicht. Eine Entprellung brauche ich auch noch - weis aber nicht genau wie.

    hier mein Programm.

    Code:
    #include <avr/io.h>
    
    uint8_t a=0;
    
    void main()
    {
    
    	DDRD=0b11111111; // kompletter PORTD als Ausgang
    	DDRC&=~(1<<PC0); // PORTC.0 als Eingang
    	PORTD|=0b10101010; // Anfangszustand definieren, Schrittmotor haltet
    
    
    		while(1)
    			{
    
    				if(PINC&(1<<PINC0)) // Pin C0 abfragen, ist er 5V? wenn ja...
    			
    				
    
    					{ 
    
    					switch (PORTD)
    
    					{
    
    					case 10101010: 
    
    						PORTD|=0b01011010;
    						break;
    
    					case 01011010:
    
    						PORTD|=0b01010101;
    						break;
    					
    					case 01010101:
    
    						PORTD|=0b10100101;
    						break;
    
    					case 10100101:
    
    						PORTD|=0b10101010;
    						break;
    
    					
    
    					
    
    					}
    					}
    
    			}
    
    }
    Kann mir jemand erklären woran es scheitert?

    mfg
    Geändert von Ratereducer (29.05.2013 um 18:15 Uhr)

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Geistesblitz
    Registriert seit
    16.03.2011
    Ort
    Dresden
    Alter
    30
    Beiträge
    1.937
    Ich vermute Folgendes:
    wenn du den Taster gedrückt hältst, dann wird in jedem Schleifendurchlauf die nächste Schrittstellung eingestellt. Da kein Verzögerndes Element wie ein Wait-Befehl vorkommt, dürfte die Frequenz, in der umgeschaltet wird, viel zu hoch sein (vermutlich im einstelligen GHz-Bereich). Da schafft es kein Schrittmotr mitzukommen, geschweige denn anzufahren. Du bräuchtest erstmal einen Wait-Befehl in der Schleife und dann noch eine Variable, mit der verhindert wird, dass die Stellung ständig wechselt, solange du drückst.

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    03.04.2013
    Beiträge
    374

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.186
    Hier gibt es auch was über Entprellen:
    http://www.mikrocontroller.net/articles/Entprellung
    Ich arbeite bei solchen Sachen gerne mit Flags.
    Nach der Entprellung Flag Taste gedrückt
    Wenn Flag Taste gedrückt und Impuls nicht ausgegeben in die Funktion Impuls springen und Flag Impuls setzten. Wenn Impuls aus, Flag Impuls aus setzen.
    Wenn Taste losgelassen Flag Taste ist 1 und Flag Impuls ist 0 alle Flags zurücksetzen.
    Wenn man den Flags vernünftige Namen gibt bleibt das ganze übersichtlich und man kann alles gegenseitig verriegeln.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.08.2006
    Ort
    Würzburg, Germany
    Beiträge
    672
    Ja genau, hier liegt das Problem:


    if(PINC&(1<<PINC0))

    Du musst danach warten, bis der Taster wieder losgelassen wird. Ich würde nach dem Switch-Element noch folgende zwei Zeilen programmieren:

    while (PINC&(1<<PINC0))
    _delay_ms (10);

    Damit hast du dann auch gleich deine Entprellung.

    Viele Grüße
    Andreas

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    15.03.2005
    Ort
    gerne in den Bergen
    Alter
    33
    Beiträge
    429
    Ich habe nicht das ganze Programm angeschaut, aber deine switch-Anweisung wird so nicht funktionieren:

    Code:
    switch (PORTD)                      
    {                      
       case 10101010:                          
          PORTD|=0b01011010;                         
          break;
    ...
    In der switch-Anweisung hast du PORT D, und der ist 8-bit gross. Nachher hinter dem case hast du eine 8-stellige Zahl die für den ersten Fall 10.101Mio bedeuten. Entweder du machst beim case auch ein 0b... davor oder du machst alles direkt in Hex-Werten. Ich meinte mal gelesen zu haben dass C die 0b.... Darstellung nicht unterstützt!
    ...wer nicht findet hat nicht gesucht...

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.08.2006
    Ort
    Würzburg, Germany
    Beiträge
    672
    ...weil ich es gerade sehe:

    Es muss auch

    Code:
    case 0b10101010:
    heißen!?

    - - - Aktualisiert - - -

    ...und gleich noch ein Fehler:

    [code]

    PORTD = 0b01011010;
    [code]

    ohne das |= das "verodert" dir sonst dein PortD und dann sind alle Bits 1.

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    29.05.2013
    Beiträge
    6
    Ich hab mein Ziel erreicht!

    http://www.youtube.com/watch?v=DIhq1Y1x1ow

Ähnliche Themen

  1. Schrittmotor mit Vorwahlzähler und Schalter (Taster) steuern
    Von juergen6020 im Forum Bauanleitungen, Schaltungen & Software nach RoboterNetz-Standard
    Antworten: 0
    Letzter Beitrag: 18.11.2012, 21:05
  2. [ERLEDIGT] Schrittmotor Steuerung mit Drehencoder u. Taster Pollin - bitte mal draufschauen
    Von MrMiffy08 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 10
    Letzter Beitrag: 15.10.2012, 01:11
  3. Einzelne Schritte mit Schrittmotor
    Von Timotor11 im Forum Motoren
    Antworten: 10
    Letzter Beitrag: 17.09.2009, 18:09
  4. Screens wechseln mit 2 Taster (oder mit einem Taster)
    Von tordy im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 14.07.2009, 14:39
  5. Antworten: 4
    Letzter Beitrag: 26.09.2008, 09:39

Berechtigungen

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