PWM mit GCC oder Bascom mit ATtyni 26

key007

Neues Mitglied
01. Mai 2009
25
0
0
56
Hombrechtikon (Schweiz)
Sprachen
Ich versuche eine LED mit mit 2 Tasten heller und dunkler machen zu können.

Ich habe einen STK500 und versuche die PWM mit eimem ATtyni 26 zum laufen bringen.

Ich suche ein Muster das mit in Bascom oder GCC geschrieben ist.
 
ATtyni26 Muster nich ATMega

Alle Muster sind immer mit einem anderen Chip.

Habe bisher keines zum laufen gebracht mit meinem ATtyni26
 
Hallo Key07,

stell doch einfach mal einen Beispielcode von einem deiner Versuche ins Forum, entweder direkt in einen Beitrag schreiben oder an einen Beitrag anhängen, dann können wir uns den mal ansehen.

Grüße,
Dirk
 
Hallo Key007!

Herzlichen Willkommen hier im Forum! :ciao:

Vielleicht solltest du einfach mal dein Programm hier einstellen.
So haben alle mehr Fakten und können dir auch besser helfen. ;)

Zeichne auch einen kleinen Anschlussplan, damit wir nicht einen Fehler in der Software suchen der sich in der Hardware bzw. im Anschluss versteckt. :cool:

Nur keine Scheu.... auch wenn dein Programm nicht perfekt ist!
Hier werden die Anfänger deswegen nicht ausgelacht!


Wenn du mit BASCOM dein Programm erstellen solltest dann möchte ich kurz zu Bedenken geben, dass BASCOM den Timer1 immer als 16bit-Timer ansieht.
Beim ATTiny26 ist es aber nur ein 8bit-Timer! :eek:

Vielleicht hast du deswegen solche Probleme? :hmmmm:

Wie schon erwähnt......
Stell einfach mal dein Programm hier ein und dann sehen wir weiter.

Gruß,
Cassio
 
Anbei meinen geänderten Code für ATtiny26

$regfile = "attiny26.dat" ' specify the used micro
$crystal = 4000000

Dim Pwmval As Byte

Config Portb.1 = Output

Config Porta.0 = Input
Config Porta.1 = Input

Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Prescale = 1

Porta.0 = 1 : Porta.1 = 1

Compare1a = 255
Pwmval = 1

Do
If Pina.0 = 0 Then
If Pwmval < 255 Then Incr Pwmval
Waitms 50 : Compare1a = Pwmval
End If
If Pina.1 = 0 Then
If Pwmval > 1 Then Decr Pwmval
Waitms 50 : Compare1a = Pwmval
End If
Loop
 
Hallo Key!

Na, das Programm kommt mir aber bekannt vor. ;)

OK.. egal..... es wird wohl so sein, wie ich es oben schon erwähnt habe.
BASCOM ist beim Timer1 immer der Meinung dass es ein 16bit-Timer ist.
Leider ist dies bei deinem Tiny26 nicht der Fall.

Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Prescale = 1

Die Angabe "PWM=8" bedeutet bei BASCOM auch nicht dass du nur einen 8bit-Timer hast, sondern dass der PWM-Ausgang im 8bit-Modus arbeitet..... Also nur von 0-255 !

Jetzt musst du allerdings die Konfiguration für den Timer1 von Hand machen, damit er richtig eingestellt wird....

Soweit verstanden?

Gruß,
Cassio
 
8 Bit Timer

Hallo Cassio

Erstmal Danke für Deine Hilfe. Habe das Muster von dieelektronikerseite.de

Ich habe ja PWM=8

Mir kommt es vor als würde BASCOM beim Tiny26 das PWM nicht kennen.

--> Fehler 12 Unknwon CONFIG parameter [PWM], in File ........

Gruss Patrik
 
Hallo Key!

Wie schon geschrieben...
Du musst BASCOM leider mit Hilfe des Tiny26-Datenblattes erzählen was es machen soll. Sonst funktioniert das leider nicht!

Das Timer1-Register ist lt. Datenblatt das: TCCR1A
Schau mal auf Seite 50 im Datenblatt! ;)

Wie du dort sehen kannst, musst du das Bit 1 auf High setzen, damit der PWM1A eingeschaltet ist.

Das ergibt also die Angabe in BASCOM:
Tccr1a = &B00000010

Das "&B" zeigt BASCOM nur, dass nun eine binäre Angabe folgt.

Damit wäre das erledigt! :)

(Wenn du PWM1B ebenfalls benutzen möchest, musst du auch das Bit 0 High setzen.)


Jetzt musst du nur noch den Prescaler einstellen...
Dafür ist TCCR1B zuständig.

Die Bits 0-3 stellen den Prescaler ein.
Wenn du nun "Prescaler = 1" möchtest, dann wäre es laut der Tabelle auf Seite 52 : 00000001
Bei Prescaler 64 ist das laut Tabelle: 00000111

Für BASCOM schreibst du also:
Tccr1b = &B00000001

Hätten wir das also auch erledigt! ;)


Wenn du nun die Werte für Timer1 einstellen bzw. verändern möchtest, dann übergibst du die Werte direkt dem OCR1A Register.

Also:
Ocr1a = 127

Damit hättest du alles was du brauchst. :)

Bekommst du den Code nun zusammen?

Ach so... die alte Config-Zeile wird damit also überflüssig!


Stell doch mal den neuen Code zusammen und poste ihn hier, bevor du ihn ausprobierst.
Schauen wir doch mal, ob ich alles richtig erklärt habe. ;)

Gruß,
Cassio
 
Test PWM

Hallo Cassio

Danke für Deine Ausführungen.
Werde an Dieser Stelle den neuen Code veröffentlichen.

Habe jetzt einiges begriffen :)

Bin ein VBA Programierer seit 13 Jahren. Meine Z80 & 8085 Kentnisse sind über 20 Jahre alt.
 
Hallo Key!

Na, sag das doch gleich! ;)


Dann wirst du das schon hin bekommen, da bin ich mir sicher!
Es sei denn, ich habe völligen Unsinn geschrieben. :hmmmm: ;)

Na, wird schon werden....

Gruß,
Cassio
 
Muster Code funktioniert noch nicht

$regfile = "attiny26.dat" ' specify the used micro
$crystal = 1000000

Dim Pwmval As Byte

Config Portb.1 = Output

Config Porta.0 = Input
Config Porta.1 = Input


Tccr1a = &B00000010
Tccr1b = &B00000111


Porta.0 = 1 : Porta.1 = 1

Pwmval = 1

Do
If Pina.0 = 0 Then
If Pwmval < 255 Then Incr Pwmval
Waitms 10 : Ocr1a = Pwmval
End If
If Pina.1 = 0 Then
If Pwmval > 1 Then Decr Pwmval
Waitms 10 : Ocr1a = Pwmval
End If
Loop

Die LED bleibt immer gleich hell. Ev. zu hohe Frequenz ????
Danke für einen weiteren Tipp.
 
Hallo Key!

Soweit sieht das schon ganz gut aus..... :)


Du solltest aber das:
Ocr1a = Pwmval
kurz vor Ende der Loop-Schleife setzen und nicht hinter den Tastern.

Also etwa so:
Code:
Do

If Pina.0 = 0 Then
If Pwmval < 255 Then Incr Pwmval
Waitms 10
End If

If Pina.1 = 0 Then
If Pwmval > 1 Then Decr Pwmval
Waitms 10
End If

Ocr1a = Pwmval
Loop

Dann sollte es eigentlich funktionieren!

....oder habe ich im Datenblatt etwas übersehen? :hmmmm:


Gruß,
Cassio



EDIT:
Du hast aber die LED mit Vorwiderstand an PB1 (also Pin 2) angeschlossen, oder?
 
LED sind korrekt

Die Schaltung auf dem STK 500 kann man fast nicht falsch machen :eek:

Habe mit einem erweiterten Muster mit einer 2. LED die Funktion geprüft.

Mir fehlt noch wo der Compare definiert ist.

Compare A Pwm = Clear Up

Bin am suchen auf dem Datenblatt von ATMEL
 
Hey Key!

Nee.... ich glaube der Fehler liegt bei mir.

Es müsste doch :
Tccr1a = &B01000010

und nicht:
Tccr1a = &B00000010

heißen!


Probiere es einfach mal bitte!

Gruß,
Cassio


PS: Sonst noch jemand eine Idee? Dino, Knickohr-Thomas?
 
Die LED brennt nicht mehr

Hallo Cassia

Die LED brennt so nicht mehr.
Beim einschalten des STK500 blitzt Sie ganz kurz.

Aber leider keine Dimmer Funktion.

... Habe heute aber trotzdem viel viel gelernt

Danke


Der aktuelle Code mit Kontroll LED wenn wert Tief LED aus wenn Wert hoch LED EIN --> das funktioniert auch gut

$regfile = "attiny26.dat" ' specify the used micro
$crystal = 1000000

Dim Pwmval As Byte

Config Portb.1 = Output
Config Portb.2 = Output


Config Porta.0 = Input
Config Porta.1 = Input


Tccr1a = &B01000010
Tccr1b = &B00000011



Porta.0 = 1 : Porta.1 = 1

Pwmval = 1
Ocr1a = 125
Do
If Pina.0 = 0 Then
If Pwmval < 255 Then Incr Pwmval
Waitms 10
Ocr1a = Pwmval
Portb.2 = 0
End If
If Pina.1 = 0 Then
If Pwmval > 1 Then Decr Pwmval
Waitms 10
Ocr1a = Pwmval
Portb.2 = 1
End If

If Pwmval > 250 Then Portb.2 = 1 ' Fast ganz oben LED EIN
If Pwmval < 10 Then Portb.2 = 0 ' Fast unten LED AUS
Loop
 
Hi Key!

Seltsam.....
Dann muss ich das Datenblatt wohl doch noch etwas ausführlicher lesen. ;)

Trotzdem solltest du das Prinzip verstanden haben. :)

Grübeln wir also noch mal etwas gemeinsam.....

Gruß,
Cassio
 
Ich glaube dass die Compare Register nicht stimmen

Bin auch am grübeln

Ich glaube dass die Compare Register nicht stimmen

Es gibt ein A & B Register

Compare1a = N
Compare1b = 255 - N

Mit dem ATMEL Datenblatt komme ich noch nicht ganz zurecht, da ich nicht gut Englisch kann.

Gruss Patrik ... key007
 
Ich probier mal mein Glück, obwohl ich noch nix mit Timern gemacht habe :rolleyes:

Die LED brennt so nicht mehr.
Beim einschalten des STK500 blitzt Sie ganz kurz.

Aber leider keine Dimmer Funktion.
Das ist dann wohl die Zeit vom Reset bis zum Start des Timers.

Der aktuelle Code mit Kontroll LED wenn wert Tief LED aus wenn Wert hoch LED EIN --> das funktioniert auch gut

$regfile = "attiny26.dat" ' specify the used micro
$crystal = 1000000

Dim Pwmval As Byte

Config Portb.1 = Output
Config Portb.2 = Output
Portb.1 auf Output ist schon mal gut weil im Datenblatt steht ...
Since this is an alternative function to an I/O port, the corresponding
direction control bit must be set (one) in order to control an output pin.
Note that OC1A is not connected in normal mode.


...
..
.
Irgendwie ist doch schon ziemlich spät ... so richtig krieg ich keine logischen
Gedanken mehr zusammen ...
:sleep: :goodnight:
ich mach erst mal Schluß für heute ...

Gruß
Dino
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)