Jump to content
Usertreffen 2024: 29.5.-2.6. | Anmelden bitte bis 30.4. ×
Schiffsmodell.net

Tipps zu Atmel AVRs


Guest Harry

Recommended Posts

Ein paar Anmerkungen zum Forums-Fahrtregler. Ich mache sie hier, weil ich dort nicht schreibberechtigt bin.

 

ISP:

 

Ich habe den Programmieradapter von Atmel, für ca. 40 Euro bei Reichelt gekauft. Funktioniert einwandfrei.

 

Ebenso programmiere ich über die parallele Schnittstelle. Aufwand: 25 pol Sub-D Steckverbinder, zwei Widerstände, ein Kondensator. Download Tool von Johann Aichinger, bis 1kByte Code kostenlos.

 

ISP bedeutet kein Softwareaufwand. Einfach SCK, MOSI, MISO, /Reset, GND und evtl . UBatt per Stiftleiste zugänglich machen. Ist nur dann etwas problematisch, wenn SCK, MOSI und MISO andere Bausteine ansteuern. Dann muss man überlegen, während der Programmierung die Verbindung zu kappen.

 

Compiler:

 

Ich nehme den kostenlosen WINAVR-Compiler. Er erzeugt auch ein *.cof-File. Dieser lässt sich ins AVR Studio laden und dort kann man den C-Code durch den Simulator jagen. Dort kann man den Code durchsteppen und sich alle Register und Speicherinhalte ansehen.

 

H-Brücke:

 

Denkt daran, dass Ihr für eine H-Brücke zwei PWM-Ausgänge braucht. Bei Umpolrelais würde einer genügen.

 

Controller:

 

Ich empfehle für den Anfang den ATmega8. Auf einer Lochrasterplatine aufgebaut genügt das für die Entwicklung. Ein Upgrade auf einen grösseren ist erst problematisch, wenn die Platine fertig ist. Der Code lässt sich leicht anpassen.

 

Entwicklungsboard:

 

Für die ersten Gehversuche genügen ein AVR, ein-zwei Kondensatoren und ein paar LED an den Portpins. Professionelle Boards kann man sich später zulegen oder ganz einsparen. Die AVRs laufen nach dem Flashen von allein los, da sie mit 1MHz Takt bei internem Oszillator geliefert werden. Kann man natürlich später umstellen.

 

Viele Grüsse

 

Harry

Link to comment

Zur aktuellen Diskussion:

 

Betrifft Umpolung: Ihr habt zwei PWM-Ausgänge (OC1A und OC1B), wenn Ihr Timer 1 verwendet. Die Ansteuerung einer H-Brücke ist damit problemlos möglich.

 

PWM-Frequenz: hier seid Ihr deutlich flexibler, als Ihr glaubt. Angenommen Ihr verwendet Timer 1 als Zeitbasis: der braucht nicht bis zum Ende laufen. Im Fast PWM Mode läuft er bei passender Einstellung der WGM Bits bis zum Wert von ICR1, und den Wert kann man passend einstellen.

 

Ein paar Details zur Leistungsfähigkeit der AVR-Prozessoren: meine ATtiny26 mit 2kB Speicher haben zwei Fahrtregler, einen 2-Kanal Schalter und einen 15 Kanal Schalter, werten also vier Impulsleitungen aus. Sie laufen mit 1 MHz Takt. Ihr habt also reichlich Leistungsreserve was Speicher und Oszillatorfrequenz angeht.

 

Viele Grüsse

 

Harry

Link to comment
Hellmut Kohlsdorf

Hallo Harry

 

Könntest du deinen Kode zur Impulslängenauswertung einstellen? habe gerade im anderen Forum mit einem Mitglied kommuniziert, der hat eine PCM-kodierte Funkanlage und kämpft gerade mit dem Problem die unmittelbar aufeinanderfolgenden Impulse der einzelnen Kanäle zu dekodieren, da er nach beenden des Ersten noch mit der Administration beschäftigt ist, und daher nicht sofort bereit ist den Impuls des zweiten zu dekodieren!

 

Idealer Weise mit einer einfachen Darstellung wie dein tyny und der Empfänger verschaltet sind. Danke

Link to comment

Moin Hellmut,

 

PCM betrifft doch nur die Funkstrecke, nicht die zwischen Empfänger und Servo!?

 

Externe Interrupts sind Mangelware beim ATmega8, aber man braucht sie nicht unbedingt. Schliesslich kommen die Impulse nicht unerwartet, und so werden sie der Reihenfolge nach durch einfache Programmschleifen durchgemessen. Aber nur die Eingänge, bei denen bei der Initialisierung

 

festgestellt wurde, dass dort etwas angeschlossen ist.

 

Gerechnet wird, wenn alle Impulse gemessen sind. Der Wachhund bellt, wenn bei der Impulsmessung etwas schiefgeht.

 

Der Code zeigt nur den Kanal 1, Fahrtregler auf dem rechten Knüppel.

 

Die Impulse kommen zwar auf den einzelnen Kanälen direkt nacheinander. Aber dadurch bekommt man nur einen konstanten Offset, der nicht stört.

 

#define BIT_IS_SET(ADRESS,BIT_NR) ((ADRESS & (u8)BIT_NR) != 0)

 

/*Kanal 1, Regler rechts*/

 

/*~T*/

 

//ENABLE_EXT_INTERRUPT_0();

 

/*~I:10*/

 

if (BIT_IS_SET(MaskeImpulsEingaenge_u8,MASK_BIT0))

 

/*~-1*/

 

{

 

/*~U:11*/

 

/*~-2*/

 

do

 

{

 

/*~T*/

 

/*warten auf Impuls

 

/*~-1*/

 

}

 

/*~O:U11*/

 

while ((PINC & MASK_BIT0) == 0);

 

/*~E:U11*/

 

/*~K*/

 

/*~+:Der Impuls Kanal 1 (Regler rechts) liegt an: Messung!*/

 

/*~U:12*/

 

/*~-2*/

 

do

 

{

 

/*~T*/

 

tmpMesswert_u16++;

 

/*~-1*/

 

}

 

/*~O:U12*/

 

while ((PINC & MASK_BIT0) != 0);

 

/*~E:U12*/

 

/*~T*/

 

/*lokalen Messwert global Âbernehmen:*/

 

MesswNeuReglRe_u16 = tmpMesswert_u16;

 

tmpMesswert_u16 = 0;

 

/*~-1*/

 

}

 

/*~E:I10*/

 

/*~T*/

 

/*~T*/

Link to comment

Hallo Leute,

 

zufällig grad drüber gestolpert, kann es sein, daß der Mega8 sogar 3 PWM-Kanäle hat?

 

Â? Peripheral Features

 

Â? Two 8-bit Timer/Counters with Separate Prescaler, one Compare Mode

 

Â? One 16-bit Timer/Counter with Separate Prescaler, Compare Mode, and Capture Mode

 

Â? Real Time Counter with Separate Oscillator

 

:!: Â? Three PWM Channels :!:

 

Â? 8-channel ADC in TQFP and MLF package

 

Eight Channels 10-bit Accuracy

 

Â? 6-channel ADC in PDIP package

 

Eight Channels 10-bit Accuracy

 

Â? Byte-oriented Two-wire Serial Interface

 

Â? Programmable Serial USART

 

Â? Master/Slave SPI Serial Interface

 

Â? Programmable Watchdog Timer with Separate On-chip Oscillator

 

Â? On-chip Analog Comparator

 

 

Ich hab nur noch nicht rausfinden können, auf welchen Ports die liegen sollen... RTFM... :ohno:

 

Grüße

 

Torsten

Link to comment
Frank Andrees

Hallo Torsten,

 

schlag nicht zu lange mit dem Kopf gegen die Wand. Du hast recht !!

 

Laut Datenblatt sind es folgende Ports:

 

MOSI/OC2 – Port B, Bit 3

 

MOSI: SPI Master Data output, Slave Data input for SPI channel. When the SPI is

 

enabled as a Slave, this pin is configured as an input regardless of the setting of DDB3.

 

When the SPI is enabled as a Master, the data direction of this pin is controlled by

 

DDB3. When the pin is forced by the SPI to be an input, the pull-up can still be controlled

 

by the PORTB3 bit.

 

OC2, Output Compare Match Output: The PB3 pin can serve as an external output for

 

the Timer/Counter2 Compare Match. The PB3 pin has to be configured as an output

 

(DDB3 set (one)) to serve this function. The OC2 pin is also the output pin for the PWM

 

mode timer function.

 

SS/OC1B – Port B, Bit 2

 

SS: Slave Select input. When the SPI is enabled as a Slave, this pin is configured as an

 

input regardless of the setting of DDB2. As a Slave, the SPI is activated when this pin is

 

driven low. When the SPI is enabled as a Master, the data direction of this pin is controlled

 

by DDB2. When the pin is forced by the SPI to be an input, the pull-up can still be

 

controlled by the PORTB2 bit.

 

OC1B, Output Compare Match output: The PB2 pin can serve as an external output for

 

the Timer/Counter1 Compare Match B. The PB2 pin has to be configured as an output

 

(DDB2 set (one)) to serve this function. The OC1B pin is also the output pin for the PWM

 

mode timer function.

 

OC1A – Port B, Bit 1

 

OC1A, Output Compare Match output: The PB1 pin can serve as an external output for

 

the Timer/Counter1 Compare Match A. The PB1 pin has to be configured as an output

 

(DDB1 set (one)) to serve this function. The OC1A pin is also the output pin for the PWMmode timer function.

 

Also sollte es mit der H-Brücke keine Probleme geben.

 

@ Harry

 

Vielen Dank für Deine guten Tipps. Nur schade, das Du dich nicht am Projekt beteiligen willst.

 

Mit freundlichen Grüßen

 

Frank

Link to comment
Guest Harry

Nein, solch eine Projektarbeit ist nichts für mich.

 

Aber ich verfolge es mit Interesse. Ich glaube, ich kann dabei noch dazulernen und interessante Lösungsansätze kennenlernen. Schiesslich gibt es in der Softwareentwicklung viele Wege, die zum Ziel führen, nicht nur einen. Ausserdem habe ich das Gefühl, dass meine Anmerkungen die Diskussion etwas abwürgen, also halte ich mich etwas mehr zurück.

 

Viele Grüsse

 

Harry

 

Der Kopf ist rund, damit die Gedanken auch einmal eine andere Richung nehmen können.

Link to comment
Guest Harry

OK, een hebb ick noch: Simulieren mit dem AVR-Studio

 

Im Makefile zum neuesten WINAVR-Compiler 20050214 muss man unter Debug Info "ELF/DWARF-2" eintragen. Beim Compillieren wird dann eine main.elf erzeugt. Die wird direkt im AVR-Studio geladen. Dort kann man dann Schritt für Schritt den Code durchlaufen lassen. Ausserdem ist es möglich, mit einem Häkchen bei view/dissassembler den C-Code zusammen mit dem Assembler Code zu sehen und laufen zu lassen.

 

Beim älteren Compiler 20040404 muss man im Makefile unter Debug Info "extcoff" wählen und dann statt .elf den .cof File ins AVR-Studio laden.

 

Beim WINAVR ist ein Tool dabei, mit dem man ein Makefile automatisch erstellen kann.

 

Ob das Ganze mit Bascom geht, weiss ich nicht.

 

Viele Grüsse

 

Harry

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.