Servoansteuerung (HXT900) mit AtMega16- kleine probleme mit dem code?

Gast #1779545
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:
1
#include <avr/io.h>
2
#include <util/delay.h>
3

4
int main (void)
5
{
6
  DDRA = 0xff;
7
  DDRB = 0xff;  
8
        DDRC = 0xff;
9
  DDRD = 0xff;
10
       
11
  while (1)
12
  {
13
    _delay_ms(20);
14
    PORTD = 0b01000000;
15
    _delay_ms(2);
16
    PORTD = 0x00000000;  
17
  }
18
return 0;
19
}

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.
#1779569
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
Gast #1779596
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?
Gast #1779597
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)..
#1779629
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.
Gast #1779634
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...
Gast #1779650
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren