PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : AVRprog Fehlermeldung Servo Problem



Smith-mini-plane
24.03.2013, 22:41
Hallo zusammen,
brauche mal Eure Hilfe.
Bekomme bei AVRprog eine Fehlermeldung Address: 0x000,Expected:0x940c,Received:0xfff

bis Dato hat es eigentlich gut Funktioniert. wollte jetzt mal versuchen mein neuen externen Quarz mit einzubinden !!!
Habe wohl die falsche Einstellung vorgenommen .
Kann mir jemand weiterhelfen ????

Zudem ne frage wenn ich Servos ansteuern will benötige ich doch diesen Externen Quarz ????
Das Problem ist das die Servos am Endanschlag weiterlaufen wollen und nicht stehen bleiben !!!

Wäre für jede Hilfe Dankbar !!!
Gruß Thomas

DanielSan
25.03.2013, 09:47
Hast du die Fuses falsch gesetzt oder was?
Kannst du die noch auslesen? Dann poste die mal hier.

Das die Servos in den Endanschlag laufen, klingt für mich erstmal nach zu langem/kurzem Timing. Das kann natürlich sein wenn dein Programm mit ner anderen Frequenz berechnet ist als der Chip in wirklichkeit Taktet.

Gruß Daniel

Smith-mini-plane
25.03.2013, 21:23
Hallo Daniel,
danke das du dich meldest,ja ich kann die Hex Datei rausladen.
Aber wie kann ich die hex Datei hier reinstellen es gehen doch nur Bilder hier !!!
Gruß Thomas

DanielSan
26.03.2013, 09:11
Die Hex Datei möchte ich auch garnicht haben. Die kann ich nicht lesen bin ja kein Atmega. ;-)

Ich möchte sehen welche Fuses du aktuell gesetzt hast. Ich benutze z.B. den Burn-O-Mat in Verbindung mit AvrDude. Dort kann man die Fuses auslesen.
Zusätzlich könntest du hier noch deinen Quellcode aus Bascom posten und mir sagen was für einen Quarz du benutzt.

Gruß Daniel

oberallgeier
26.03.2013, 09:45
Hi Thomas!


... wenn ich Servos ansteuern will benötige ich doch diesen Externen Quarz ...Nein, Servos sind gegenüber geringen Verschiebungen des Signaltimings sehr tolerant, die können getrost mit dem internen Oszillator des Controllers (ist ja ein Atmel !?!) getaket werden (klick hier - mein tiny-Servotester). (https://www.roboternetz.de/community/threads/38626-Suche-Servotester-mit-555er?p=367949&viewfull=1#post367949)

Wenn Deine Servos in den Endanschlag pfeifen, kann es auch daran liegen, dass Du entweder kein oder ein defektes Programm im Controller hast - hast ja Probleme beim Flashen genannt - möglicherweise liegts am der häufigsten Fehler bei der Servoinstallation: fehlender GND-Verbindung zwischen Controller und Servo - klick hier (http://www.rn-wissen.de/index.php/Servo#Ansteuerung:_Signalform_und_Schaltung)- scrollen, das Schaltbild unten.

Smith-mini-plane
27.03.2013, 21:17
Hallo
Anbei mein Bascom Code wie gewünscht , habe extra für mein Servo eine extra Spannungsversorgung vorgesehen zudem habe ich die GND Leitung
überprüft , aber meine Servos Zittern ohne Ende habe auch versucht andere Ausgaenge zu benutzen , war auch ohne erfolg !!
Bezüglich Fuses auslesen bin ich dran mus erstmal die passenende Software organisieren zum Quarz 16Mhz .
Bin jedoch auf meinen Atmega 16 ausgewichen.

Danke für Eure Hilfe
Gruß Thomas

$regfile "m16def.dat"
$baud = 19200
$crystal = 1000000
$framesize = 64
$swstack = 64
$hwstack = 64
Config Timer1 = Timer , Prescale = 8 'timer f¸r servos
Enable Timer1
Timer1 = 62535
Config Porta = Output
Porta.0 = 0 'hier haengt servo1
Porta.1 = 0 'hier haengt servo2
Porta.2 = 0 'hier haengt servo3
Porta.3 = 0 'hier haengt servo4

On Timer1 Servoirq 'servo

Enable Interrupts

Dim Kanal As Byte
Dim Servo(4) As Word 'min: 61535, mitte 62535, max 63535 = 2000 schritte

Do
Servo(1) = 61535 'Mitte
Servo(2) = 62535 'Mitte
Servo(3) = 63535 'Mitte
Servo(4) = 62535 'Mitte
Loop

Servoirq:
If Kanal = 0 Then
If Porta.0 = 0 Then 'wenn port low
Timer1 = Servo(1) 'dann timer auf entsprechende verzˆgerung
Porta.0 = 1 'und port anschalten
Else 'das hier passiert erst bei dem darauf folgenden interrupt
Porta.0 = 0 'dann port wieder ausschalten
Incr Kanal 'und den naechsten kanal bearbeiten
End If
End If
If Kanal = 1 Then
If Porta.1 = 0 Then
Timer1 = Servo(2)
Porta.1 = 1
Else
Porta.1 = 0
Incr Kanal
End If
End If
If Kanal = 2 Then
If Porta.2 = 0 Then
Timer1 = Servo(3)
Porta.2 = 1
Else
Porta.2 = 0
Incr Kanal
End If
End If
If Kanal = 3 Then
If Porta.3 = 0 Then
Timer1 = Servo(4)
Porta.3 = 1
Else
Porta.3 = 0
Incr Kanal
End If
End If

If Kanal = 4 Then
Timer1 = 2000 'eine pause von ca. 12ms bis zum nchsten interrupt. Bei guten Servos oder Brushlessreglern kann man hier bis auf 65530 gehen ==> ansteuerfrequenz von ~ 200Hz
Kanal = 0
End If
Return
End

Sauerbruch
27.03.2013, 23:45
Hallo Thomas!

Erstmal ein kleiner allgemeiner Tipp: Wenn Du Deinen Code mit "CODE" in eckigen Klammern beginnst, und ihn mit "/CODE" in eckigen Klammern beendest, wird er in so einem Scroll-Fenster dargestellt:



...
...


Und das ist für alle viel besser zu lesen!

Aber ich habe auch einen potenziellen Fehler in Deinem Programm entdeckt:

Bei einer Taktfrequenz von 1 MHz und einem Prescaler von 8 taktet der Timer mit 125 kHz, eine Periode ist somit 8 µs lang. Bewegt sich der Timer-Vorladewert zwischen 63535 und 61535, braucht es also zwischen 2000 und 4000 Takten bis zum nächsten Überlauf. Multipliziert man das mit der Taktdauer von 8 µs kommt man auf eine Impulsbreite zwischen 16 und 32 ms - und das ist definitiv zu lang für Servos! Um den kompletten Stellweg auszunutzen, darf die Impulsbreite nur zwischen etwa (!) 0,8 und 2,2 ms variieren. Bei über 10 ms ist es logisch, dass die Rudermaschine an den Anschlag knallt!

Für eine Impulsbreite zwischen 1 und 2 ms müsste der Timer also schon nach 125 bis 250 Takten überlaufen, d.h. man müsste ihn in der ISR auf Werte zwischen 65410 und 65285 vorladen, was allerdings "nur" 125 Abstufungen des Stellweges ermöglicht (die allerdings vollkommen ausreichen müssen!!).

Alternatively lässt Du den Prescaler von 8 einfach weg - dann taktet der Timer mit genau 1 MHz, eine Periode dauert somit genau 1 µs, und damit rechnet es sich auch viel leichter: Für 1 ms müssen 1000 Takte bis zum Überlauf vergehen, d.h. Vorlade-Wert 64535, und für 2 ms 2000, d.h. Vorlade-Wert 63535.

Wo genau die Grenzen Deiner Servos sind (vermutlich etwas unter 1 ms und etwas über 2 ms), das könntest Du dann ja noch per Feintuning ausloten.

Smith-mini-plane
06.04.2013, 22:34
Hallo Zusammen,
habe mal die versuche mit den Servos zurückgestellt .
Problem habe ich immer noch mit den Fusbits , habe bis dato keine möglichkeit die Fusebits umzustellen.
Habe mir jetzt das im Forum beschrieben AVR ISP STK Programmer bestellt ( LPT1) Schnittstelle.
jetzt kann ich die Fusebits einstellen jedoch ist mein Atmel 32 wahrscheinlich defekt siehe Fehlermeldung
andere Microcontroller geht es !!
Zudem habe ich die gleiche Meldung bei meinem Atmel 16

Möchte aber jetzt nicht weiter an den Fusebits rumspielen bevor ich nicht weiss das es funktioniert !!!
Sonst brauch demnächst ein 10 Pack Atmel 32
25061
Was ist bei mir falsch gelaufen und kann ich meine zwei Atmels noch retten !!

Danke für Eure Hilfe

Smith-mini-plane
09.04.2013, 21:29
Hallo zusammen,
habs hinbekommen , M-controller läuft jetzt mit externen Quarz , Servos lassen sich jetzt auch ansteuern ohne das sie in die Endlagen laufen !!
Bis dahin 3 Tote Atmega´s ,aber ich glaube das gehört wohl dazu.

Jetzt kann ich mal anfangen den Ablauf meines Programms beginnen ( KTW Steuerung )

Gruß Thomas

Sauerbruch
09.04.2013, 23:20
Bis dahin 3 Tote Atmega´s ,aber ich glaube das gehört wohl dazu.

Na - sooo schnell sterben Mikrocontroller nicht!
Wenn Du ihn auch mit einem externen Quarz nicht mehr zu laufen bekommst (d.h. Kommunikation über ISP nicht mehr möglich), wirst Du die Taktquelle wahrscheinlich auf einen externen Takt eingestellt haben. Das klingt ähnlich wie externer Quarz und kann daher schnell mal verwechselt werden, der Controller ist hier aber auf ein ausreichend schnelles Rechtecksignal von außen angewiesen (beim Mega16 an Pin 13 (XTAL1) anzuschließen).

Ein kleiner Rechteckgenerator mit z.B. 1MHz sollte daher in keiner Bastelkiste fehlen - beim großen "C" gibt´s z.B. so etwas für etwas mehr als einen Euro:

http://www.conrad.de/ce/de/product/179426/Quarzoszillator-Serie-TFT-680-TFT680-Frequenz-1-MHz-Bauform-DIP-14-L-x-B-207-mm-x-131-mm?queryFromSuggest=true

Damit solltest Du die Dinger wieder zum Leben erwecken (und den Takt wieder auf internen RC-Oszillator umstellen) können!

Smith-mini-plane
13.04.2013, 20:38
Hallo Sauerbruch,
danke mit dem Tipp des Rechteckgenerator ,werde es mal ausprobieren muß ich aber erstmal noch bestellen !!

Hab ja noch ein paar als Reserve bestellt , also falls Reichelt ausverkauft ist soo sorry

Gruß und Danke

Thomas

oberallgeier
13.04.2013, 21:31
... Rechteckgenerator ,werde es mal ausprobieren muß ... noch bestellen ...JEDER hat ja einen Rechteckgenerator, genau für diesen Zweck. Wo der steckt, habe ich hier erklärt (klick mal). (https://www.roboternetz.de/community/threads/45827-Fuse-irrt%C3%BCmlich-auf-extern-Takt-Hier-die-einfachste-L%C3%B6sung%21) Heisst auch: ich muss mir keinen kaufen, wo auch immer.

Sauerbruch
14.04.2013, 12:29
danke mit dem Tipp des Rechteckgenerator ,werde es mal ausprobieren muß ich aber erstmal noch bestellen !!

Der Tipp von Oberallgeier ist natürlich eine clevere Alternative zum Rechteckgenerator. Aber falls Du schon keine serielle Schnittstelle am PC mehr haben solltest (sowas soll´s ja geben), könntest Du auch Deinen letzten "lebenden" Controller mit einem entsprechenden Mini-Code dazu umfunktionieren:

DDRX.Y = 1

Do
Toggle PORTX.Y
Waitus 1
Loop

Smith-mini-plane
15.04.2013, 22:06
Hallo Sauerbruch,
Hallo Oberallgeier,
danke für die Antworten .
@ Sauerbruch einer lebt wieder :p!!!
@ Oberallgeier ja den Rechteckgenerator werde ich noch bestellen!!

Bezüglich KTW Steuerung ich kann schon per Tastendruck 2 Servos ansteuern ,sprich Servo 1 (Klappe links) öffnet zeitverzögert bewegt sich Servo 2( Klappe rechts) öffnet.
Da werde ich noch bestimmt noch viele fragen an die Experten haben, werde wohl hierfür extra Berichten.
Also nochmal Danke an Euch.

Gruß Thomas