PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] Hilfe für Motorsteuerung mit Attiny85 gesucht



Pat96
25.07.2017, 14:06
Hallo,

ich als AVR Anfänger benötige dringend Hilfe von Euch Bascom Spezialisten.
Problem: Ein Attiny85 soll in Bascom so programmiert werden, dass er die Impulslänge welche aus einem Modellbau Empfänger stammt ermittelt und in einen Wert zwischen 0 – 255 umwandelt. Der umgewandelte Wert wird dann an den Timer geschickt welcher daraus eine PWM macht und diese ausgibt (Leistungselektronik Motor).

Ich habe mir mit der Pulsein Funktion einen Code zusammen gebastelt, welcher die oben genannte Funktion auf einem Atmega88 problemlos ausführt (Drehzahl des Motors von 0 – max. Drehzahl einstellbar).
Auf dem Attiny85 geht das jedoch schief…….es kommt zwar ein Rechteck Signal raus, welches sich aber nur minimal mit den unterschiedlichen Steuerknüppel Positionen der Fernbedienung ändert. Ich vermute das der Attiny85 die Pulsein Funktion falsch auswertet.

Ich hoffe das mir einer von Euch den entscheidenden Hinweis für mein Problem geben kann.
Über allgemeine Verbesserungsvorschläge für mein Programm würde ich mich zudem sehr freuen, da ich unübersehbar ein blutiger Anfänger bin.

Viele Grüße


Bascom Code:

$regfile = "attiny85.dat"
$crystal = 1000000

Config Portb.1 = Output
Config Pinb.0 = Input

Dim Y As Word
Dim Z As Single
Dim X As Byte

Const M = 255 / 79
Config Timer0 = Pwm , Compare B Pwm = Clear Up , Prescale = 8


Do

Pulsein Y , Pinb , 0 , 1 ' Y- Werte zwischen 130 und 209 '

Y = Y - 130 ' Angepasste Y - Werte zwischen 0 und 79 '
Z = Y * M ' Errechnete Z - Werte zwischen 0 und 255 '
Z = Round(z)
X = Z


Compare0b = X


Loop
End

oberallgeier
25.07.2017, 18:24
.. Code zusammen gebastelt, welcher die oben genannte Funktion auf einem Atmega88 problemlos ausführt .. Auf dem Attiny85 geht das jedoch schief ..Code für tinys sind bei mir noch nie 1:1 auf megas gelaufen (ich programmiere in C - nicht Bascom). Grund bei meinen wenigen Erfahrungen waren die unterschiedlich anzusprechenden Register. Sind denn Registernamen und die angesprochenen Bitnamen in beiden Codes gleich? Hast Du kontrolliert, dass die Registernamen etc in den Codes jedesmal mit dem Datenblatt überein stimmen ?

Searcher
26.07.2017, 07:35
Hallo Pat,
sind beim ATmega88 und beim Attiny85 die Fuses (die für die internen 8Mhz? und CKDIV8 ) so eingestellt, daß beide µC wirklich mit 1000000Hz Systemtakt laufen?

Pulsein nimmt die $crystal Angabe als Grundlage für sein Timing. Weicht bei einem µC die tatsächliche Systemfrequenz von dieser Angabe ab, kommt es zu solchen O:)ErscheinungenO:)

Gruß
Searcher

Pat96
26.07.2017, 09:54
Hallo Searcher,

unglaublich....genau das war der Fehler, es funktioniert nun einwandfrei!!!

Vielen Dank für diesen Hinweis!
Ein wirklich geniales Forum.

Viele Grüße