Forum: Mikrocontroller und Digitale Elektronik Motor langsam starten mit AVR und L293D


von Florian Wolling (Gast)


Lesenswert?

Hallo!
Kann mir jemand helfen?
Ich möchte mit einem AVR AT90S2313 über einen L293D einen Motor langsam
per Tasterdruck starten lassen, dann auf höchster Geschwindigkeit
fahren lassen und dann nach Tasterdruck langsam wieder anhalten
lassen.
Kann mir jemand sagen, wie man das machen kann?
Hat vielleicht jemand schon einen fertigen (ähnlichen) Quellcode
geben?

Da man ja keine Anhänge mehr beifügen kann, könnt ihr mir auch e-mails
schicken! -> florians-c-e-r-page@onlinehome.de

MFG,
################
Florian Wolling#
################

von Frank Linde (Gast)


Lesenswert?

Such mal hier unter dem Stichwort PWM (Pulsweitenmodulation). Damit
kannst Du einen Motor stufenlos regeln. Quellcode geistert hier auch
irgendwo herum.

Gruß, Frank

von Florian Wolling (Gast)


Lesenswert?

Ich habe jetzt einen Quellcode gefunden:

######################################################################

.include  "8515def.inc"

.def  temp = r16
.def  pwm = r17

.cseg
.org  $000
  rjmp  reset

reset:  rjmp  init

init:  ldi  temp,ramend
  out  spl,temp
  ldi  temp,high(ramend)
  out  sph,temp

  ldi  temp,0b11111111
  out  ddrd,temp

  out  portb,temp

  ldi  temp,0b10000001
  out  tccr1a,temp

  ldi  temp,0
  out  ocr1ah,temp

  ldi  temp,1
  out  ocr1al,temp

  ldi  temp,0b00000001
  out  tccr1b,temp

  sei

  rjmp  loop

loop:  ldi  pwm,230
  out  ocr1al,pwm
  rjmp  loop

######################################################################

Leider weiß ich nicht was die einzelnen Befehle machen und wo die
Taktfrequenz eigestellt wird.

Kann mir jemand helfen?

Kann man anstatt des AT90S8515 auch einen AT90S2313 verwenden?

Ist das Programm und die Taktfrequenz vom Quarz abhängig?

Wie muss ich den Code verändern, um z.B. eine Frequenz von 1kHz zu
erhalten?

MFG,
################
Florian Wolling#
################

von thkaiser (Gast)


Lesenswert?

Wenn Du nicht weißt, was die einzelnen Befehle machen, gibts nur eins:
Es erlernen.
Nach Deiner letzten Aussage gehe ich davon aus, daß Du mit Controllern
noch nicht sehr viel gemacht hast. Nun stellt sich die Frage, ob Du nur
mal schnell dieses Projekt realisieren willst (dann sollte man das
Ganze diskret aufbauen mit VCOs oder so) oder ob Du Dich in Zukunft
ernsthaft mit Controllern beschäftigen willst. Wenn Du die
Programmierung wirklich richtig lernen willst, nutzt es nichts,
irgendwelche Codeschnipsel abzuschreiben, denn - wie Du schon bemerkt
hast - man hat ohne Grundlagen keinen Durchstieg.
Beim Einstieg in die Controllertechnik sollte man Schritt für Schritt
vorgehen (aber nicht das Ziel - die Motorsteuerung verlieren). Steure
erstmal ein paar LEDs an, beschäftige Dich mit Timern, verinnnerliche
die Funktionsweise der PWM, dann klappts auch. Und vor allem: Du weißt,
warum es funktioniert.

von Florian Wolling (Gast)


Lesenswert?

Hallo thkaiser!
Ich möchte mich in Zukunft intensiv mit AVR's beschäftigen und ich
beschäftige mich schon seit etwa 1/2 Jahr mit ihnen.
Ich kann mit den I/O-Ports umgehen.
Ich kann mit dem Stack umgehen.
Jetzt möchte ich zur nächsten Stufe, dem Timer.
Leider habe ich dazu noch nichts richtiges gefunden.
Auf http://www.mikrocontroller.net und http://www.avr-asm-tutorial.net
habe ich auch nichts zu Timern gefunden. Durch die Datenblätter steige
ich auch nicht wirklich durch.
Vielleicht opfert sich ja mal jemand und erzählt mir die
Grundfunktionen und wie man den Timer startet und man mit ihm umgeht.

Es wäre für mich schon ein großer Schritt und eine Große Hilfe wenn ich
über den Timer eine LED zum blinken bringen kann.
Bisher habe ich das immer ohne Timer gemacht.

Danke für Eure Hilfe...

MFG,
################
Florian Wolling#
################

von Christian (Gast)


Lesenswert?

Such mal im Codeforum nach Timer. Da wirste einiges an Beispielen
finden. Ich habs auch nicht anders gelernt. Programm schrittweise
durchgehen und im Datenblatt nachschauen für was die Register zuständig
sind.

von Florian Wolling (Gast)


Lesenswert?

Dankeschön!!!

von Florian Wolling (Gast)


Lesenswert?

Hallo!
Kann man so ein PWM-/Timer-Signal eigentlich an jedem Portpin eines
AT90S2313 ausgeben?

MFG,
################
Florian Wolling#
################

von thkaiser (Gast)


Lesenswert?

Im Prinzip ja.
Möchte man auf die Hardware-PWM-Fähigkeiten des Controllers zugreifen,
ist man auf den zugewiesenen Port-Pin beschränkt. Baut man ein
Software-PWM auf (nur empfehlenswert, wenn der Controller nicht viel
anderes zu tun hat), kann man sich die Port-Pins aussuchen. Man kann
den 2313 rein theoretisch sogar so programmieren, daß alle Portpins ein
PWM-Signal ausgeben - wofür auch immer das sinnvoll sein könnte.
Ich nutze einen 2313 in einer Applikation mit 4 PWM-Ausgängen (steuert
4 Motoren).

von Florian Wolling (Gast)


Lesenswert?

Hallo thkaiser!
Dankeschön für Deine Antwort.
Wenn ich das alles richtig verstanden habe hat der 2313 zwei 8bit-Timer
und einen 16bit-Timer, stimmt das?
Welchen Namen hat dann welcher Timer?
Welcher festgelegter Ausgang ist für welchen Timer?
Stimmt das?:
(T0)  PD4 ist für  8bit-Timer 0 ???
(T1)  PD5 ist für  8bit-Timer 1 ???
(OC1) PB3 ist für 16bit-Timer 2 ???

Dankeschön!

MFG,
################
Florian Wolling#
################

von thkaiser (Gast)


Lesenswert?

Nein, der 2313 hat nur 2 Timer.
Timer0 = 8-Bit
Timer1 = 16-Bit
Beide Timer haben noch die Möglichkeit, einen Vorteiler
hinzuzuschalten.
T0(PD4) und T1(PD5) sind alternative Eingänge für die Timer, aber
üblicherweise versorgt man die Timer mit dem Systemtakt (somit sind PD4
und PD5 als normaler Port-Pin nutzbar).
Nur der 16-Bit-Timer Timer1 kann als PWM-Quelle benutzt werden. Im
Datenblatt ab Seite 35 wird beschrieben, wie dieser Modus genutzt
werden kann. OC1 (PB3) ist im PWM-Modus dann der Ausgang.

von Florian Wolling (Gast)


Lesenswert?

Hallo thkaiser!
Dankeschön für Deine Antworten!
Jetzt habe ich das Prinzip endlich verstanden! ;-)

MFG,
################
Florian Wolling#
################

von guenter (Gast)


Lesenswert?

Hallo thkaiser...

>>Im Prinzip ja.
>>M?chte man auf die Hardware-PWM-F?higkeiten des Controllers
zugreifen,
>>ist man auf den zugewiesenen Port-Pin beschr?nkt. Baut man ein
>>Software-PWM auf (nur empfehlenswert, wenn der Controller nicht viel
>>anderes zu tun hat), kann man sich die Port-Pins aussuchen. Man kann
>>den 2313 rein theoretisch sogar so programmieren, daß alle Portpins
ein
>>PWM-Signal ausgeben - wofür auch immer das sinnvoll sein könnte.
>>Ich nutze einen 2313 in einer Applikation mit 4 PWM-Ausgängen
(steuert >>4 Motoren).

********************************************************

Kann man das Coding bekommen ???

meine email:

guenter.lintzmeyer@planet-interkom.de

im Voraus besten Dank

Guenter

von Florian Wolling (Gast)


Lesenswert?

Ich wäre an dem Code auch interessiert! g

florians-c-e-r-page@onlinehome.de

MFG,
################
Florian Wolling#
################

von Oliver (Gast)


Lesenswert?

Hallo Florian,

wie misst du eigentlich die Umdrehungsgeschwindigkeit des Motors? Wenn
du die Geschwindigkeit reproduzierbar Geschwindigkeitsrampen nachfahren
willst, muss die Geschwindigkeit geregelt werden. Wenn du das nicht
machst, hängt die Motordrehzahl von dem Lastmoment ab und der Motor
verhält sich bei unterschiedlicher Last immer anders.

Gruß Oliver

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.