www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Servoansteuerung (HXT900) mit AtMega16- kleine probleme mit dem code?


Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich versuche mich gerade das erste mal mit servos und der delay bib von 
WinAVR.
Alles was ich momentan versuche ist in einer schleife meinem HXT900 
Servo die verlangten 20ms pause und dann ein 2ms signal zu geben um ihn 
damit dauerhaft auf die endstellung auszurichten.

Ich benutze einen AtMega16 und programmiere mit AVRStudio4 und WinAVR.
Der sehr kurze testcode sieht wie folgt aus:
#include <avr/io.h>
#include <util/delay.h>

int main (void)
{
  DDRA = 0xff;
  DDRB = 0xff;  
        DDRC = 0xff;
  DDRD = 0xff;
       
  while (1)
  {
    _delay_ms(20);
    PORTD = 0b01000000;
    _delay_ms(2);
    PORTD = 0x00000000;  
  }
return 0;
}

Ich habe am Pulspin für den servo auch eine led und die zeigt mir 
folgendes:
Ein Blinken mit ungefähr 2 Hz.
Ich würde ja nun 50Hz erwarten... also habe ich in den 
projekteinstellungen den Takt des Controllers explizit auf 16000000 Hz 
angegeben. Es hängt auch definitv ein 16Mhz quarz dran.

Wo liegt der fehler? Der servo arbeitet natürlich nicht korrekt, die 
daten kommen aber an - blos eben so wie es aussieht mit dem falschen 
takt.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alex schrieb:

> projekteinstellungen den Takt des Controllers explizit auf 16000000 Hz
> angegeben. Es hängt auch definitv ein 16Mhz quarz dran.

Das mag schon sein.
Aber wird er auch benutzt?
Sprich: Hast du die Fuses so eingestellt, dass der AVR auch 'weiß' das 
er einen Qaurz an den Pins hängen hat.

_delay_ms ist da ein gutes Werkzeug. Mach dir eine Schleife, die bei 
16Mhz eine LED 1 Sekunde an und 1 Sekunde aus schaltet. Wenn die 1 
Sekunde eher 16 Sekunden sind, dann wird der Quarz nicht benutzt.
Fuses umstellen und wieder den Blinktest machen.

http://www.mikrocontroller.net/articles/AVR_Fuses

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo!
danke, das mit den fuses wird es wohl sein - die led leuchtet 16sekunden 
bei delay von "1000ms"..

wenn ich jetzt in avr studio die SUT_CKSEL fuses einstellen will habe 
ich mehrere möglichkeiten für einen externen quarz  (Ext. 
Crystal/Resonator ...) - und bin nun nicht sicher welche einstellung auf 
meinen 16MHz quarz zutrifft- sind die 16MHz jetzt medium oder high 
frequency und wie sieht es mit der "start up time" aus?

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ach und (die profis hier mögen mir die anfängerfrage verzeihen) - das 
bedeutet ich kann den Atmega 16 auch komplett ohne externen quarz auf 
1MHz intern laufen lassen? .. dann tue ich das bei meinem RC-Roboter 
nämlich (da habe ich einen 16MHz quarz dran aber an fusebits setzen habe 
ich nicht gedacht)..

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...das ausprobieren mit SUT_CKSEL hat jetzt dazu geführt, dass ich nicht 
mehr auf den internen oszi zurückstellen kann und einen "ISB Mode Error" 
bekomme... irgendwelche tips? :/

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alex schrieb:

> Crystal/Resonator ...) - und bin nun nicht sicher welche einstellung auf
> meinen 16MHz quarz zutrifft- sind die 16MHz jetzt medium oder high
> frequency

high

> und wie sieht es mit der "start up time" aus?

Nimm die längste.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alex schrieb:
> ach und (die profis hier mögen mir die anfängerfrage verzeihen) - das
> bedeutet ich kann den Atmega 16 auch komplett ohne externen quarz auf
> 1MHz intern laufen lassen?

Ja.
Das ist der Default Zustand. So wird der µC ausgeliefert.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alex schrieb:
> ...das ausprobieren mit SUT_CKSEL hat jetzt dazu geführt, dass ich nicht
> mehr auf den internen oszi zurückstellen kann und einen "ISB Mode Error"
> bekomme... irgendwelche tips? :/

Du hast den verlinkten Artikel nicht gelesen und hast irrtümlich auf 
externen Taktgenerator gestellt. Ein Quarz ist aber kein Taktgenerator. 
Lies nochmal den Link.

Da du noch einen 2.ten Prozessor hast:
Programmiere den so, dass er einen Pin ständig 0 / 1 schaltet.
Dieses Signal bietest du dem verfusten Prozessor als Taktsignal an XTAL1 
an. Im AVR-Studio auf die kleinste mögliche Programmierfrequenz stellen 
und der µC sollte sich wieder ansprechen lassen.

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ist auf high und längste gesetzt... und da komme ich jetzt nicht mehr 
raus und bekomme beim befehl "Program" dauernd eine error message. HIGH 
und LOW sind auf 0xFF... habe beim suchen eben auch gesehen dass das 
eventuell problematisch ist...
was nun? ich benutze den AFR ISP mkII und habe wie gesagt den externen 
quarz dran...  verstehe nicht was jetzt falsch war - reset ist so nicht 
möglich?
sorry für die fragerei ich hänge hier grade ziemlich in der luft...

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
na schönes schlamassel.. werde ich dan wohl mal tun. danke für die 
Gedult.

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
-t +d

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alex schrieb:
> na schönes schlamassel..

Da musst du durch.
Hat man diese Hürde erst mal geschafft, ist die wichtigste Falle 
umgangen.
Wenn du den µC wieder am laufen hast und wieder an die Fuses rann 
kommst: schalt auch gleich JTAGEN ab.

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke, werde ich. wenn ich das richtig verstanden habe, also folgendes:
meinem anderen µC eine schleife geben, die einen pin abwechselnd auf 
ein/aus schaltet - womit ich wohl 500kHz bekomme (da der ja auch seinen 
externen quarz nicht nutzt).
Den pin anschließen an XTAL1 (den isp auf 125kHz gestellt lassen? passt 
ja grade oder nicht)- und schon kann ich die fusebits in AVR studio 
wieder setzen?  - dort auf external oszi/crystal / high mit längster 
start up time - und JTAGEN aus.
na ich bin gespannt. ;)

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.