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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von broda (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


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

von broda (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.