PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Tipps zu Atmel AVRs


Harry
21.02.2005, 21:06
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

Bastl-Wastl
21.02.2005, 23:13
hallo Harry

warum lässt du dich nicht Freischalten,wenn ich Fragen darf? :wink:

Deine Tips könnten sie sicher gut gebrauchen.

Gruß

Bastl :matrose:

Harry
28.02.2005, 08:49
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

Hellmut Kohlsdorf
28.02.2005, 18:41
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

Harry
28.02.2005, 20:22
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*/

Torsten
28.02.2005, 22:10
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

Harry
28.02.2005, 22:37
OCR1A und OCR1B auf Port B1+ B2 (Timer1) und OC2 auf Port B3 (Timer2).

Viele Grüsse

Harry

Frank Andrees
28.02.2005, 22:40
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

Harry
01.03.2005, 09:42
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.

Hellmut Kohlsdorf
01.03.2005, 17:21
Hallo Harry

Nicht zurückhalten, deine Beiträge sind sehr wertvoll

Harry
02.03.2005, 09:39
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