• 20.04.2024, 01:10
  • Registrieren
  • Anmelden
  • Sie sind nicht angemeldet.

 

Lieber Besucher, herzlich willkommen bei: Aqua Computer Forum. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

atmel PWM aktiviert sich nicht

Montag, 14. Juli 2008, 22:46

ich möchte beim attiny13 die interne Hardware-PWM einschalten. es kommt aber kein PWM-Signal.

hier ist der Code, mit dem ich es versucht habe:
----------------
.include "tn13def.inc"


main:
   
  ldi    r16, 0x1F
  out    DDRB, r16
     
  ldi    r16, 0x1F
  out        PORTB, r16


  ldi    r16, 180
  out    OCR0A, r16

  ldi    r16, 0xC3
  out    TCCR0A, r16

  ldi    r16, 0x09
  out    TCCR0B, r16
 

  ldi    r16, 255
  out    TCNT0, r16

 
loop:
     rjmp   loop
---------------


also es geht hauptsächlich um die mittleren 3 Register. die oberen habe ich hinterher drangeschrieben.

erst habe ich reihenfolge TCCR0A TCCR0B OCR0A versucht.
das ging nicht. danach habe ich OCR0A vor TCCR0A TCCR0B gemacht. am ende habe ich noch TCNT0 versucht.

es nützt nix. die PWM aktiviert sich nicht an dem betroffenen Pin.

dann habe ich zum schluß noch versucht, alle Port-Pins außer dem Reset-Pin auf 1 zu setzen (siehe die anweisungen ganz oben), um zu gucken, ob der PWM-generator den betroffenen ausgangs-Pin korrekt überschreibt. das funktioniert. es schalten alle Pinne auf 1 bis auf den PWM-Pin. der bleibt auf Null, wird also korrekt von dem PWM-generator überschrieben. aber der schaltet sich nicht ein. es ist kein PWM-signal auf dem PWM-Pin zu finden.

Wisst ihr, was ich verkehrt gemacht habe?

Der Microcontroller läuft mit internem Takt auf ca. 9 MHz, automatischer interner Oszillator. alle anderen Pins sind unbedrahtet, also nur die Pins alleine ohne angeschlossene zusatzsachen, mit dem Oszilloskop gemessen.
Dieses Youtube-Video ist aufgrund von Urheberrechtsbeschränkungen in deinem Land nicht verfügbar.

Re: atmel PWM aktiviert sich nicht

Montag, 14. Juli 2008, 23:31

hmmm, hast du keinen externen oszialltor für genauere taktgebung?

Re: atmel PWM aktiviert sich nicht

Montag, 14. Juli 2008, 23:34

Wie hast Du denn gemessen ?

Re: atmel PWM aktiviert sich nicht

Dienstag, 15. Juli 2008, 00:02

warte mal, ich habe gerade die selbe frage im mikrocontroller.net Forum gefragt. also es gibt hier probleme mit den Register einstellungen und ein paar streitigkeiten. Wenn jemand was weiß, könnt ihr schreiben, aber ihr müßt euch nicht mehr extra anstrengen.

also es gibt einen Fast PWM Mode 7 und einen Mode3. mit Mode 3 geht die PWM jetzt. Mode 7 ist ein extra besonderer Mode für bessere fälle.

also die Pwm geht jetzt, aber ich habe trotzdem noch probleme.

9 Mhz durch 255 vom Zähler geteilt sind nur 32 KHz. ich möchte aber ein festes verhältnis z.B. 30/70 haben und die frequenz wählbar machen zwischen 20-500 KHz.

falls jemand genau weiß, wie das geht, kann er ja schreiben. :)
Dieses Youtube-Video ist aufgrund von Urheberrechtsbeschränkungen in deinem Land nicht verfügbar.

Re: atmel PWM aktiviert sich nicht

Dienstag, 15. Juli 2008, 00:20

reset verktoren initialsieren
stack pointer initialsieren,
Port Initialsieren
Timer Control Register Setzen (TCCRx),
Timer Compare Register Setzen OCRx,
jump zum main loop.

.. ich habe gerade kein datenblatt zur hand, aber es sollte kein problem sein dem tiny13 eine pwm zu entlocken.

Re: atmel PWM aktiviert sich nicht

Dienstag, 15. Juli 2008, 01:10

also nachtrag es geht jetzt:

es geht auch Mode7. mit Mode 7 lassen sich deutlich höhere frequenzen realisieren, der Timer ist halt nur kürzer. und man kann dann nur ausgang OC0B benutzen. man muß dann beide OC0A und OC0B setzen. den OC0A auf den Timer-Rücksetz wert und den OC0B auf den wert, an dem das signal kippen soll.
Dieses Youtube-Video ist aufgrund von Urheberrechtsbeschränkungen in deinem Land nicht verfügbar.

Re: atmel PWM aktiviert sich nicht

Dienstag, 15. Juli 2008, 02:17

unabhängig vom Problem (da hilft Datenblatt lesen...)

Möchtest du nicht lieber einen c-compiler verwenden? ;) macht das leben so viel leichter sobald es über 10 Zeilen Code hinausgeht.. der avg-gcc kann auch attiny code erzeugen afaik..
V: Cuplex (sock. 478), Twinplex (gf-4 halterung), Airplex-Classic, Eheim 1046, div. Winkel, 2 Gehäusedurchführungen... alles Plug'n'Cool

Re: atmel PWM aktiviert sich nicht

Dienstag, 15. Juli 2008, 22:48

hm.. ja, wenn es mal viel code gibt, überleg ich mir das.

der vorteil ist, daß ich bei asm bei zeitkritischen operationen eine bessere kontrolle darüber habe, in welche einzel-befehle das programmierte zerlegt wird.

gäbe es eigentlich auch einen c-compiler, der zu der hex-datei auch gleichzeitig eine asm-datei erzeugt, oder so?
Dieses Youtube-Video ist aufgrund von Urheberrechtsbeschränkungen in deinem Land nicht verfügbar.

Re: atmel PWM aktiviert sich nicht

Mittwoch, 16. Juli 2008, 00:06

jeder C-Compiler erzeugt erst eine ASM-Datei und die wird dann vom Assembler übersetzt nach .hex.. du kannst dir auch ein "Mischmasch" anzeigen lassen (mit Debug-Information Compilieren), nicht als .hex aber als objekt-file (aus der du dann verlustfrei ein hex machen kannst) wo du dann immer die Zeile C-Code angezeigt bekommst und dann, welchen ASM-Code er daraus erzeugt hat (objdump)

für ARM sieht das dann beispielsweise so aus:

Quellcode

1
2
3
4
5
6
int getDeviceID() {
800001a4:       e92d4010        stmdb   sp!, {r4, lr}
        if (*((volatile unsigned char *)0x820f0000) == 0xFF) {
800001a8:       e59f4030        ldr     r4, [pc, #48]   ; 800001e0 <.text+0x1e0>
800001ac:       e5d43000        ldrb    r3, [r4]
800001b0:       e35300ff        cmp     r3, #255        ; 0xff
V: Cuplex (sock. 478), Twinplex (gf-4 halterung), Airplex-Classic, Eheim 1046, div. Winkel, 2 Gehäusedurchführungen... alles Plug'n'Cool

Re: atmel PWM aktiviert sich nicht

Mittwoch, 16. Juli 2008, 00:41

ah schön, wenn ich dann mal was großes habe, werde ich das dann vielleicht benutzen.

im moment ist die logik der schaltung ehe sehr klein. ich spare gerade eben 6 zusätzliche widerstände und 2 transistoren. die schaltung bewegt sich noch in einem rahmen, den man vielleicht auch noch mit ein paar digital-ICs realisieren könnte.
Dieses Youtube-Video ist aufgrund von Urheberrechtsbeschränkungen in deinem Land nicht verfügbar.

powerslide

unregistriert

Re: atmel PWM aktiviert sich nicht

Montag, 4. August 2008, 13:30

du kannst doch auch asm begfehle direkt zwischen den c-code packen .. eben für kritische sachen.. wo du genau wissen willst was passiert..