www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Schrittmotor mit Atmega 8 warum geht PD0 als Eingang nicht?


Autor: Martin e. C. (eduardo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo ich möchte über ein ganz einfache Schaltung ein Unipolares 
Schrittmotor über 2 Taster ansteuern so dass z.B. Taster 1 gedruckt dann 
dreht der Motor in eine Richtung, Taster 2 gedruckt dann dreht in der 
andere Richtung.

Mein Problem:
Ich habe die zwei Taster am Port D0 und D1 des Atmegas angeschlossen 
(Aktiv Low).
Wenn ich die Taster 1 drucke (Port D0) passiert nichts.
Wenn ich Taster 2 drucke dann dreht der Motor wie gewünscht!

Nehme statt PD0 für Taster 1 z.B PD4 dann funktionieren beide Richtungen 
wie gewünscht warum das??

Gruß
Martin

Autor: hp-freund (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PD0 ist auch RxD. Hast Du in deinem Programm die serielle Schnittstelle 
initialisiert?

Sonst brauchen wir wohl den Quelltext...

Autor: Martin e. C. (eduardo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hp-freund schrieb:
> PD0 ist auch RxD. Hast Du in deinem Programm die serielle Schnittstelle
> initialisiert?

Nein eingentlich nicht!

Quelltext ganz primitiv:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include "lcd-routines.h"

#define NEGRO       _BV(PC0)
#define AMARILLO    _BV(PC1)
#define GRIS        _BV(PC2)
#define NARANJA     _BV(PC3)

#define DELAY   4
#define DELAY2  6 


//const uint8_t rechts[] = {NARANJA, GRIS, AMARILLO, NEGRO}; // rückfahrt
//const uint8_t links[] = {NEGRO, AMARILLO, GRIS, NARANJA};

//uint8_t i;

void rueck_vor_fahrt (void)
{
  while(1)
  
    {
    if ( PIND & (1<<PIND1)) {
    PORTC = NARANJA;    
    _delay_ms(DELAY);    
    PORTC = GRIS;    
    _delay_ms(DELAY);    
    PORTC = AMARILLO;    
    _delay_ms(DELAY);    
    PORTC = NEGRO;    
    _delay_ms(DELAY);
    }
    
    if ( PIND & (1<<PIND4)) {
    PORTC = NEGRO;    
    _delay_ms(DELAY);    
    PORTC = AMARILLO;    
    _delay_ms(DELAY);    
    PORTC = GRIS;    
    _delay_ms(DELAY);    
    PORTC = NARANJA;    
    _delay_ms(DELAY);
    }
    
    else {
      PORTC = 0x00;
      break;
      }
    }
}

//---------------------- 1. versucht ok!


int main(void)

  {  
  DDRC = 0xff;     
  PORTC = 0x00;
  DDRD = 0x00;     
               
      while(1)
    {
        rueck_vor_fahrt();

    }
  }

Autor: Hubert G. (hubertg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PullUp an PortD aktivieren oder externe PullUp verwenden.
Ausserdem fragst du auf 1 ab.

Autor: hp-freund (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich fürchte Du musst deine Funktion noch mal überarbeiten. Zur Zeit 
reagiert die if Abfrage auf H am Eingang, also Taste nicht gedrückt.
Dann gibt es für 2 mal if nur ein else? Delay ist auch recht klein.
Schau mal hier:

http://www.mikrocontroller.net/articles/AVR-GCC-Tu...

Autor: Martin e. C. (eduardo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich verwende externe PullUp also 10k pro Taster

Hubert G.:
> Ausserdem fragst du auf 1 ab.

Sorry habe ich mich vertipp, Taster sind "HIGH-Aktiv"

Autor: Petrov (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also Pull-UPs und High aktive Taster ?

Autor: Martin e. C. (eduardo)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
so, für etwas Klarheit Taster sind so wie im Bild

Autor: Tobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hp-freund schrieb:
> Dann gibt es für 2 mal if nur ein else? Delay ist auch recht klein.

Was hat Delay damit zu tun? damit dreht er der Motor schnell oder 
langsam.

Autor: Petrov (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe das probiert. Funktioniert bei meinem ATmega 8 an PD0 mit 10K 
Pull-down
auch nicht.

Offensichtlich ist der Atmega8 nicht in der Lage diesen Pin mit 10K weit 
genug runter zu ziehen.

man lernt nie aus !!

Mit 1K8 gehts.

besser ist: Interner pullup und Taster gegen Ground - geht immer

Gruß peter

Autor: hp-freund (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tobi schrieb:
> Was hat Delay damit zu tun? damit dreht er der Motor schnell oder
> langsam.

So lange die Taste noch prellt auch mehrfach mit Pause zwischendurch ;)

Autor: Petrov (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nun habe ich einen anderen MEGA8 versucht. Und siehe da bei dem gehts.

Offensichtlich haben diese Bastlerdinge so grosse Exemplarstreuungen.

Gruß peter

Autor: Martin e. C. (eduardo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Petrov,
vielen Dank für das Testen, ich hätte nicht darauf gekommen.

@hp-freund
verstehe nicht ganz was du meins.
Was Tobi sagt ist genau was ich mache, gebe ich z.B 10 an der Delay dann 
dreht der Motor natürlich Langsamer.


Gruß
Martin

Autor: hp-freund (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn Du gute Taster so wie hier hast:
http://de.wikipedia.org/wiki/Prellen
ist nach 16ms der Zustand natürlich schon stabil.

Wenn sie nicht so gut sind, kann es sein das Du bei der if Abfrage mal H 
und mal L erwischst solange die Taste gedrückt ist/prellt.

Autor: hp-freund (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nachtrag: Das wirst Du nicht sehen, sondern nur messen können...

Autor: Martin e. C. (eduardo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok kapiert, normallerweise benutze ich das Routine von Peter Danneger 
zum Entprellen, hier kommt auf alle Fälle auch.

Gruß
Martin

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.