Forum: Mikrocontroller und Digitale Elektronik Einzelne Bits der ATtiny45 Register mit BASCOM setzen


von broda (Gast)


Lesenswert?

Hallo!

Ich bin gerade dabei, mit dem Fast PWM Mode des ATtiny45 zu spielen.
Ziel ist am Ende ein PWM Signal mit einer Frequenz von ~25kHz, in Sachen 
Genauigkeit habe ich einen angenehmen Spielraum von 21kHz bis 28kHz.

Durchgerechnet ist auch schon alles, ich muss nur noch die Bits in den 
entsprechenden Registern setzen.
Jetzt habe ich gelesen, dass in Bascom nicht mehr erforderlich ist, als 
eine Anweisung wie:
1
WGM02 = 0
Braucht der Compiler tatsächlich keine Unterweisung mehr, in welchem 
Register dieses Bit steht?
Beim kompilieren dieses Codes bekomme ich nämlich relativ nichtssagende 
Fehlermeldungen...
1
$regfile = "ATtiny45.dat"
2
$crystal = 6000000                                          '6MHz
3
$hwstack = 40
4
$swstack = 16
5
$framesize = 32
6
7
Config Portb.1 = Output
8
Config Portb.0 = Output
9
10
Wgm02 = 0
11
Wgm01 = 1                                                   'fast PWM mode
12
Wgm00 = 1
13
14
Com0a1 = 1
15
Com0b1 = 1                                                  'inverting mode
16
Com0a0 = 1
17
Com0b0 = 1
18
19
Cs01 = 0
20
Cs02 = 0                                                    '~23,4kHz PWM Frequenz
21
Cs00 = 1
Fehlermeldungen sind zwei 46er Errors in den Zeilen 10 und 11, wo WGM01 
und WGM02 gesetzt werden.

von Karl M. (Gast)


Lesenswert?

Hallo,
1
Wgm02 = 0
2
Wgm01 = 1                                                   'fast PWM mode
3
Wgm00 = 1
4
5
Com0a1 = 1
6
Com0b1 = 1                                                  'inverting mode
7
Com0a0 = 1
8
Com0b0 = 1
9
10
Cs01 = 0
11
Cs02 = 0                                                    '~23,4kHz PWM Frequenz
12
Cs00 = 1

sind die Bitnamen eines AVR Registers und nicht das AVR Register selbst 
!
Schaue dazu in das orig. Atmel Datenblatt, dort findest Du für alle 
Hardwareeinheiten die zugehörigen Register- und deren Bitnamen !

von broda (Gast)


Lesenswert?

Ach, jetzt verstehe ich meinen Blödsinn, danke!
Bascom ist zu sehr Neuland für mich...

von broda (Gast)


Lesenswert?

Hm, darf ich den Thread eben noch einmal für mein Projekt missbrauchen?
Inzwischen sind alle Bits in den betreffenden Registern so gesetzt, wie 
sie es sein sollen.
Dennoch klappt es mit dem PWM Signal nicht.
Ein Oszi habe ich leider nicht da, dafür messe ich mit meinem Multimeter 
bei einem duty cycle von 50% etwas, das logisch 0 entspricht an den 
Pins.
Die Frequenzmessungsfunktion stuckt auch nur 0Hz aus, natürlich nichts 
anderes beim Tastgrad.

Code:
1
$regfile = "ATtiny45.dat"
2
$crystal = 6000000                                          '6MHz
3
$hwstack = 40
4
$swstack = 16
5
$framesize = 32
6
7
Tcnt0 = &B00000000
8
Ddrb = &B11000000                                           'PB0 und PB1 sind Outputs
9
10
Tccr0a = &B11001111                                         'WGM00 - WGM01 - 0     - 0     - COM0B0 - COM0B1 - COMB0A0 - COM0A1
11
Tccr0b = &B10000000                                         'CS00  - CS01  - CS02  - WGM02 - 0      - 0      - FOC0B   - FOC0A
12
13
Do
14
   Ocr0a = &B01111111                                       '127
15
Loop

von MWS (Gast)


Lesenswert?

> Ddrb = &B11000000  'PB0 und PB1 sind Outputs

Nicht wirklich. Bit0 ist ganz rechts und Bit7 links, genauso wie hier:

> Tccr0a = &B11001111
> 'WGM00 - WGM01 - 0     - 0     - COM0B0 - COM0B1 - COMB0A0 - COM0A1

Der Rest wird genauso verdreht sein.
Binär ist auch fehleranfällig, mach's besser so:
1
TCCR0A = Bits(COM0A1, COM0A0, COM0B1, COM0B0, WGM01, WGM00)

Ob Du die richtigen Bits für die gewünschte Funktion setzt, hab' ich 
dabei nicht überprüft.

von broda (Gast)


Lesenswert?

MWS schrieb:
>Bit0 ist ganz rechts und Bit7 links,[...]

Das erklärt natürlich eine Menge.
Umgestellt und der Code tut seinen Job.
Danke dir, in Sachen Form habe ich offensichtlich noch einiges zu 
lernen!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.