• 28.04.2024, 06:56
  • Register
  • Login
  • You are not logged in.

 

Dear visitor, welcome to Aqua Computer Forum. If this is your first visit here, please read the Help. It explains how this page works. You must be registered before you can use all the page's features. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

atmel PWM aktiviert sich nicht

Monday, July 14th 2008, 10:46pm

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.

mario_cell

Senior Member

Re: atmel PWM aktiviert sich nicht

Monday, July 14th 2008, 11:31pm

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

Stephan

Administrator

Re: atmel PWM aktiviert sich nicht

Monday, July 14th 2008, 11:34pm

Wie hast Du denn gemessen ?

Re: atmel PWM aktiviert sich nicht

Tuesday, July 15th 2008, 12:02am

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

Tuesday, July 15th 2008, 12:20am

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

Tuesday, July 15th 2008, 1:10am

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.

Safti

Senior Member

Re: atmel PWM aktiviert sich nicht

Tuesday, July 15th 2008, 2:17am

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

Tuesday, July 15th 2008, 10:48pm

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.

Safti

Senior Member

Re: atmel PWM aktiviert sich nicht

Wednesday, July 16th 2008, 12:06am

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:

Source code

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

Wednesday, July 16th 2008, 12:41am

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

Unregistered

Re: atmel PWM aktiviert sich nicht

Monday, August 4th 2008, 1:30pm

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