PWMSignal auf Atmega ausgeben

Furu

Neues Mitglied
21. Juni 2011
7
0
0
40
Sprachen
Guten Tag liebe Mitglieder,

ich brauche dringend eure Hilfe. Ich bin noch Anfänger, möchte aber gerne ein pwmSignal auf ein ATmega168 mit AVRStudio4 ausgeben. Gibt es im Internet gute vorgeschriebene Programme, die ich mir einfach kopieren kann? Oder kennt sich jemand so gut aus, dass er es mir mal schnell in 2-3 Minuten runterschreiben könnte?
Ich könnte auch mein Programm schicken, welches ich modifizieren will, aber da es überhaupt nicht läuft (und recht viel "Unnützes" enthällt), und ich nicht so wirklich weiß, wo ich anfangen soll, würde es wahrscheinlich nicht so viel bringen. Auf Anfrage schicke ich es jedem gerne zu (lieber aber nicht öffentlich, weil ich nicht genau um die Patentgesetze weiß).

LG
 
Hallo Furu!

Willkommen im AVR-PRAXiS-Forum :ciao:

Zu deiner Frage habe ich selbst ein paar Fragen, vielleicht können wir dir dann besser weiterhelfen:


  • Gibt es bestimmte Anforderungen an die PWM (Auflösung, Frequenz)?
  • In welcher Sprache programmierst du, Assembler oder C?
  • Benutzt du bereits einen Timer in deinem Programm, bzw. ist ein Timer belegt und nicht mehr für PWM verfügbar?
Grüße,
Dirk
 
Hallo Furu,

ich brauche dringend eure Hilfe. Ich bin noch Anfänger, möchte aber gerne ein pwmSignal auf ein ATmega168 mit AVRStudio4 ausgeben.
das ist eigentlich nicht wirklich schwer. Da du aber überhaupt keine weiteren Angaben machst steht man da wie bei der Frage ....
"Ich will gerne ne Schraube reinschrauben und weiß nicht wie"
- wie groß ist die Schraube ?
- Sechskant, Kreuzschlitz, Inbus, ... ?
- ... usw

tja ... mit den wenigen Angaben kann man da eigentlich gar keine Antwort zu geben weil man überhaut nicht weiß ...

- welche Sprache willst du verwenden ? (Assembler, C, ...)
- Hardware oder Software-PWM
- wie groß soll die Auflösung des PWM-Signals sein ?
- wie hoch soll die Frequenz sein ?
- ... usw

Gibt es im Internet gute vorgeschriebene Programme, die ich mir einfach kopieren kann? Oder kennt sich jemand so gut aus, dass er es mir mal schnell in 2-3 Minuten runterschreiben könnte?
und da gehen die Probleme schon weiter ...
mal schnell möglichst ohne eigenen Einsatz ein Ergebnis haben wollen. Und in 2-3 Minuten geht da sowieso nix mal eben schnell runterzuschreiben. Für ne saubere Lösung bräuchte man sowieso erst einmal etwas mehr Infos und dann auch ein wenig mehr Zeit.

Ich könnte auch mein Programm schicken, welches ich modifizieren will, aber da es überhaupt nicht läuft (und recht viel "Unnützes" enthällt), und ich nicht so wirklich weiß, wo ich anfangen soll, würde es wahrscheinlich nicht so viel bringen. Auf Anfrage schicke ich es jedem gerne zu (lieber aber nicht öffentlich, weil ich nicht genau um die Patentgesetze weiß).
Auftragsarbeiten wird hier wohl eher keiner erledigen. Es wird gerne weitergeholfen wenn du Probleme hast. Aber es wird dir wohl keiner deine Arbeit machen.

Bei patentgeschütztem Zeugs wird es zusätzlich schwierig. Wir haben hier sogar letztens rumdiskutiert ob wir eine geänderte LCD-I2C-Lib im Thread mit einfügen die bei anderen Foren zwar teilweise frei zu lesen ist von der wir aber nicht wissen ob der Autor damit einverstanden ist.

Schreib also am besten erst einmal ein paar zusätzliche Infos mit denen man sich ein besseres Bild von deinem bereits vorhandenen KnowHow (um zu wissen wie man es am besten erklären kann) und deinem genauen Problem (damit man weiß was du eigentlich genau machen willst) hier ins Forum.

Wir helfen gerne, machen aber nicht die Arbeit von anderen und vor allem nicht umsonst und erst recht nicht mal eben schnell.

Gruß
Dino
 
Hi Furu
Du bist zwar nicht der Erste, der ein solches Anliegen hier zur Sprache bringt, aber trotzdem möchte ich dir einmal dazu ein paar Takte sagen, wie ich zu solch einem Ansinnen stehe. Vielleicht geht dir dabei, und ein paar Anderen auch, noch mal so nebenbei ein Lämpchen auf.
Viele von uns bemühen sich, mit sehr viel Information Fragestellern und Anfängern den Einstieg etwas zu erleichtern. Nicht selten ist ausführlich dokumentierter Code dabei. Es ist zwar unsere unbezahlte Zeit, aber wir machen es gern.
Aber so nach dem Motto: "ihr habt ja sowieso nix vor, da könnt ihr mir doch mal schnell so ein kleines Programm schreiben" ist schon fast eine Frechheit. Ich rechne dir zugute, das du vermutlich noch zur Schule gehst..... Trotzdem, du kannst lesen und ich nehme auch an, wenn auch in Grenzen, denken. Es sollte doch nicht so schwer sein, unter dem Begriff PWM zumindest die Richtung zu finden und dann mit ein bischen Eifer vielleicht mal etwas zu experimentieren. Auch wenn's Annfangs noch am Verständnis mangelt, es ist kein Hexenwerk. Mit einem hier erbettelten fertigen Produkt anschließend irgendwo scheinbare Leistung zu präsentieren, ist auch ein Schmücken mit fremden Federn, um das mal klar auszudrücken.
Und wenn du es nicht für Schule oder Ausbildung brauchst, sondern für dein Hobby, gerade dann lohnt doch die Investition an Zeit, um zu lernen, einen Controller zu programmieren.
Gruß oldmax
 
Hallo,

sorry, wenn es frech rüergekommen ist, aber ich dachte, es ist nicht so viel Arbeit (habe daher ca. 1 oder 2 Minuten geschrieben).

Ich habe mich mit dem Datasheet vorbereitet: http://www.atmel.com/dyn/resources/prod_documents/doc2545.pdf (Kapitel 15. 8-bit Timer/Counter0 with PWM)

Meine Ziele:
Ich möchte meine Lösung in C Programmieren. Die Hardwarelösung ist auch gut für höhere Frequenzen, also nehme ich diese zur Sicherheit. Ich brauche eine Auflösung von 255 (8 Bit).

Meine Vorbereitung/Recherchen:
Ich brauche den 8-Bit Timer TCNT0A . Erreicht das Register TCNT0A den Wert, welcher im Register OCR0A voreingestellt wurde, wird ein Interrupt ausgelöst.
Der Timer Einstell-Bits:
WGM02=0 WGM01=1 WGM00=1 (Für die 8-Bit Obergrenze Fast PWM Mode)
COM0A1=1 und COM0A0=0 (für den nicht invertierenden PWM-Modus)

Der Befehl in C lautet dann: TCNT0A = ( 1<<WGM01) |( 1<<WGM00) | (1<<COM0A1);

Jetzt muss ich einen Vorzähler mit einer gewünschten Taktfrequenz bestimmen:
CS12=1 CS11=0 CS10=1 (entspricht dem Verhalten: CK|1024 , wobei ich nicht ganz genau weiß, warum ich das brauche und ob das richtig ist)

Der Befehl in C lautet dann: TCCR0A = (1<<CS10) | (1<<CS12);

Wie oben schon geschrieben, brauche ich einen Vergleichswert auf OCR0A.

Der Befehl in C lautet dann: OCR1A = 125;

Schlussendlich will ich das Signal auf dem Port DDRA Ausgeben.

Der Befehl in C lautet dann: DDRA = 0b00000001; oder DDRA = 0x01; (Ich will das Signal am Pin 1 ausgeben)


Meine Ausführung:

Code:
void main (void){

DDRA = 0x01;
TCNT0A  = ( 1<<WGM01) |( 1<<WGM00) | (1<<COM0A1);
TCCR0A = (1<<CS10) | (1<<CS12);
OCR1A = 125;
                                                                                                            
}


Könnte mir bitte jetzt jemand weiterhelfen? Ich denke nicht, dass es jetzt aufeinmal gehen wird, kann es bis Freitag aber auch nicht einfach so testen.

Ich bin auch dankbar für Tipps, muss ja nicht gleich das fertige Programm sein :D
 
Hallo Furu,

der Mikrocontroller hat keinen PORTA, wo du ein PWM-Signal ausgeben könntest.

Du möchtest den Timer0 nutzen und eine 8Bit PWM erzeugen, das ist soweit in Ordnung. Einen Interrupt benötigst du nicht. Der AVR hat eine sogenannte Capture-Compare-Unit, die sich um die PWM kümmert. PWM kannst du mit Timer0 an den Pins OC0A (PD6) und OC0B (PD5) ausgeben.

Du bist soweit schon auf dem richtigen Weg, ich müsste nun selbst mal in das Datenblatt schauen, das mache ich vielleicht mal nachher oder morgen, wenn ich mehr Zeit habe.

Gruß,
Dirk
 
Hallo Furu,

sorry, wenn es frech rüergekommen ist, aber ich dachte, es ist nicht so viel Arbeit (habe daher ca. 1 oder 2 Minuten geschrieben).

Ich habe mich mit dem Datasheet vorbereitet: http://www.atmel.com/dyn/resources/prod_documents/doc2545.pdf (Kapitel 15. 8-bit Timer/Counter0 with PWM)
Es geht also um einen ATmega48, 88 oder 168.

Auf Seite 96 des Datenblattes geht es schonmal mit Punkt "15.7.3 Fast PWM mode"
los und auf Seite 97 mit "15.7.4 Phase correct PWM mode" weiter.

Meine Ziele:
Ich möchte meine Lösung in C Programmieren. Die Hardwarelösung ist auch gut für höhere Frequenzen, also nehme ich diese zur Sicherheit. Ich brauche eine Auflösung von 255 (8 Bit).

Meine Vorbereitung/Recherchen:
Ich brauche den 8-Bit Timer TCNT0A . Erreicht das Register TCNT0A den Wert, welcher im Register OCR0A voreingestellt wurde, wird ein Interrupt ausgelöst.
Für Hardware-PWM benötigst du keine Interrupts. Das macht die Hardware komplett
von alleine. Du mußt nur die gewünschte Frequenz und den Modus einstellen. Dann
kannst du durch das Ändern eines Registerwertes dein ausgegebenes PWM-Signal
beeinflussen. Alles sehr einfach.

The counter counts from BOTTOM to TOP then restarts from BOTTOM. TOP is defined as 0xFF when WGM2:0 = 3, and OCR0A when WGM2:0 = 7. In non-inverting Compare Output mode, the Output Compare (OC0x) is cleared on the compare match between TCNT0 and OCR0x, and set at BOTTOM. In inverting Compare Output mode, the output is set on compare match and cleared at BOTTOM.

Der Timer Einstell-Bits:
WGM02=0 WGM01=1 WGM00=1 (Für die 8-Bit Obergrenze Fast PWM Mode)
COM0A1=1 und COM0A0=0 (für den nicht invertierenden PWM-Modus)

in Tabelle 15-8 sind die Bit für die Einstellungen drin. Bei FastPWM bleiben bei dir
Mode 3 oder Mode 7. Du hast Mode 3 eingestellt.

Tabellen 15-3 + 15-6 für COM0xn
COMx1 = 1 , COMx0 = 0
TCCR0A : COM0A1 COM0A0 COM0B1 COM0B0 – – WGM01 WGM00 (Bits7...0)
==> 1 0 1 0 0 0 1 1 = 0xA3h für TCCR0A


note that the Data Direction Register (DDR) bit corresponding to the OC0x pin must be set in order to enable the output driver.
PD6 = OC1A , PD5 = OC1B
DDRD ==> - 1 1 - - - - - ==> also Bits 5+6 für Kanal A und B auf 1

The FOC0A bit is only active when the WGM bits specify a non-PWM mode. ==> 0
The FOC0B bit is only active when the WGM bits specify a non-PWM mode. ==> 0
Clock-Source CS02..CS00 => 001 ... 101 möglich
TCCR0B : FOC0A FOC0B – – WGM02 CS02 CS01 CS00 (Bits7...0)
==> 0 0 0 0 1 0 0 1 = 0x09h für TCCR0B
mit CSx = 001 läuft die PWM auf dem vollen Prozessortakt (also am schnellsten)

TCNT0
OCR0A --> generate a waveform output on the OC0A pin ==> Wert für PWM-Kanal A
OCR0B --> generate a waveform output on the OC0B pin ==> Wert für PWM-Kanal B

TIMSK0 : – – – – – OCIE0B OCIE0A TOIE0 (Bits7...0) ==> alles auf 0

TIFR0 : – – – – – OCF0B OCF0A TOV0 (Bits7...0) ==> alles auf 0

Der Befehl in C lautet dann: TCNT0A = ( 1<<WGM01) |( 1<<WGM00) | (1<<COM0A1);

Jetzt muss ich einen Vorzähler mit einer gewünschten Taktfrequenz bestimmen:
CS12=1 CS11=0 CS10=1 (entspricht dem Verhalten: CK|1024 , wobei ich nicht ganz genau weiß, warum ich das brauche und ob das richtig ist)

Der Befehl in C lautet dann: TCCR0A = (1<<CS10) | (1<<CS12);

Wie oben schon geschrieben, brauche ich einen Vergleichswert auf OCR0A.

Der Befehl in C lautet dann: OCR1A = 125;

Schlussendlich will ich das Signal auf dem Port DDRA Ausgeben.

Der Befehl in C lautet dann: DDRA = 0b00000001; oder DDRA = 0x01; (Ich will das Signal am Pin 1 ausgeben)

Meine Ausführung:

Code:
void main (void){

[B][COLOR="red"]DDRA = 0x01[/COLOR][/B]; ==>DDRD = 0x40 fuer Kanal A !!
TCNT0A  = ( 1<<WGM01) |( 1<<WGM00) | (1<<COM0A1);
TCCR0A = (1<<CS10) | (1<<CS12);
OCR1A = 125;
                                                                                                            
}

Könnte mir bitte jetzt jemand weiterhelfen? Ich denke nicht, dass es jetzt aufeinmal gehen wird, kann es bis Freitag aber auch nicht einfach so testen.

Ich bin auch dankbar für Tipps, muss ja nicht gleich das fertige Programm sein :D
Ich hoffe mal das die Ausführungen von mir etwas weiterhelfen. Wobei ich selber noch
nichts mit der Hardware-PWM oder C gemacht habe :rolleyes:

Das war jetzt mal etwa ne knappe Stunde Erklärbär. Nix mit 5 Minuten. Weil ich mich erstmal
durch das Datenblatt arbeiten mußte. ;)

EDIT: Gut das Dirk auch schon was geschrieben hat. Ich hoffe mal das ich jetzt alle Fehler bei mir raus habe ;)

Gruß
Dino
 
Hi und danke erstmal für die tolle Hilfe!
Mittlerweile ist mir auch aufgefallen, dass es wohl doch nicht in 5 Minuten geht :eek:

Ich habe jetzt mit beiden Hilfen nochmal mein Programm umgeschrieben und noch einen Fehler von Dino ausgemerzt, glaube ich.

PHP:
#include <avr/io.h>

int main (void){

TCCR0A = 0xA3;  //TCCR0A = ( 1<<WGM01) |( 1<<WGM00) | (1<<COM0A1) | (1<<COM0B1);
TCCR0B = 0x09;  //TCCR0B = (1<<CS00) |( 1<<WGM02); z.B. mit ' (1<<CS12) ' langsamer machen
OCR0A = 125;
OCR0B = 125;  //setze ich spaßhalber wegen Port PD6

DDRD=0x60; //0x60=01100000  , damit PD5 und PD6 als Ausgänge gesetzt werden.

return 0;       
}

Zwischenfrage: Wie könnte ich PD5 und OC0B z.B. definieren, damit ich schreiben kann:
PHP:
PD6=OC0A;  //Fehler war: PD6=OC1A; ?  Auf den Ausgabeport wird jetzt das OC0A-Signal "umgeleitet", oder ist das überflüssig?
PD5=OC0B;

Ich beschreibe mal weiter mein Vorgehen, damit auch garantiert nichts schief läuft:
AVRStudio4 -> NewProject -> AVR GCC + Project Name: fastPWM + Create initial File and folder -> AVR Simulator2 mit ATmega168 -> Code einfügen -> Compilieren

Beim Compilieren bekomme ich folgende Warnung:
Code:
avr-gcc  -mmcu=atmega168 -Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT fastPWM.o -MF dep/fastPWM.o.d  -c  ../fastPWM.c

Würde es denn jetzt theoretisch gehen, wenn ich es anschließen würde? Oder ist noch etwas falsch bzw. fehlt das "PD6=OC0A" oder ist dies automatisch durch das "DDRD=0x60" gesetzt?
 
Hallo Furu,

Zwischenfrage: Wie könnte ich PD5 und OC0B z.B. definieren, damit ich schreiben kann:
Code:
PD6=OC0A;  //Fehler war: PD6=OC1A; ?  Auf den Ausgabeport wird jetzt das OC0A-Signal "umgeleitet", oder ist das überflüssig?
PD5=OC0B;
Du mußt keine Signale umleiten. Wenn du dem Atmel in den Funktionsregistern sagst das er mit dem Timer0 und OC1A nen PWM machen soll dann koppelt er automatisch statt dem PortBit PB6 den Ausgang des PWM-Generators auf den Pin. Dann kannst du in PortB6 schreiben was du willst. Es wird nie am IC-Pin ankommen. Das einzige mas du machen kannst ist, den Namen mit einem "Alias" versehen. Dann heißt sozusagen Peter nicht nur Peter sondern auch zusätzlich noch August. Du darfst dabei aber keine Namen oder Begriffe verwenden die schon anders verwendet und definiert sind.

Würde es denn jetzt theoretisch gehen, wenn ich es anschließen würde? Oder ist noch etwas falsch bzw. fehlt das "PD6=OC0A" oder ist dies automatisch durch das "DDRD=0x60" gesetzt?
mach es doch einfach ;) Ich probiere auch immer am "lebenden Objekt". Als erstes wird bei mir die Hardware gebaut, dann das Programm zusammengesetzt und wenn es nicht so ganz paßt evtl noch was an der Hardware geändert/verbessert.

Gruß
Dino
 
Ich habe es angeschlossen und Connected (mit der Einstellung AVRISP dll - USB).
Alles ok, bis ich auf "Write Flash Memory using current settings". Denn dann kommt die Fehlermeldung: "Getting isp parameter.. SD=0x06 .. OKUnable to open the specified file"

Mir fehlt momentan der Ansatz, was es sein könnte. Es gab auch nur ein Forum, wo einer dasselbe Problem hatte, jedoch ohne Lösungsvorschlag.
 
Hallo Furu,

Alles ok, bis ich auf "Write Flash Memory using current settings". Denn dann kommt die Fehlermeldung: "Getting isp parameter.. SD=0x06 .. OKUnable to open the specified file"
hört sich für mich an als ob das Brennprogramm die .hex-Datei mit dem übersetzten Code nicht findet. Warum jetzt auch immer. Muß man irgendwo noch eintragen welche Datei gebrannt werden soll ?

Gruß
Dino
 
Rechtsklick aufs Projekt: "Edit Configuration Options..." dann bekommt man "Project Options"angezeigt und man kann eintragen (hab das Häckchen gesetzt), dass man sich eine hex-Datei erstellen lassen will (Create Hex file). Man kann auch noch "Generate Map-/List-File" anklicken. Das habe ich auch getan.
Es gibt unter "Other Files" im Projekt eine PWM.aws, PWM.lss, PWM.map ... eine PWM.hex finde ich allerdings tatsächlich nicht.

Direkt eine Aufforderung, dass ich eingeben müsste, welche datei "gebrannt" werden soll, habe ich nicht erhalten.

Beim Build wird folgendes ausgegeben:
Code:
rm -rf fastPWM.o  fastPWM.elf dep/* fastPWM.lss fastPWM.map
Build succeeded with 0 Warnings...
avr-gcc  -mmcu=atmega168 -Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT fastPWM.o -MF dep/fastPWM.o.d  -c  ../fastPWM.c
avr-gcc -mmcu=atmega168 -Wl,-Map=fastPWM.map fastPWM.o     -o fastPWM.elf
avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature  fastPWM.elf fastPWM.hex
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 --no-change-warnings -O ihex fastPWM.elf fastPWM.eep || exit 0
avr-objdump -h -S fastPWM.elf > fastPWM.lss
 
Hi Furu,

da steht was von fastPWM.elf und fastPWM.hex drin. Das ELF-Format kenne ich eigentlich nur von uralten Linux-Compilaten aus den Anfangszeiten. Für alte Programme gibt es heute bei Linux immer noch eine elf-Bibliothek die eine Ausführung ermöglicht. Bei AVR32 gibts diese ELF-Dateien glaube ich auch. Alles sehr komisch ...

Da ich kein C programmiere kann ich da wohl wenig weiterhelfen. Der Name fastPWM.hex sieht zwar vielversprechend aus aber wenn die Datei nicht da ist dann hilft das auch wenig. Ist der Compiler wirklich fehlerfrei durchgelaufen ?

schon komisch ...

Gruß
Dino
 
Hallo Furu,

normalerweise müsste das Hex-File im Projektverzeichnis im Unterverzeichnis "default" zu finden sein. Wenn der Compiler Errors erkennt, wird das Hex-File nicht erzeugt, bzw. gelöscht, bei Null Errors und Warnings wird es erzeugt. Bei dir müsste es eigentlich vorhanden sein, da es nicht mal Warnings gab.

Gruß,
Dirk
 
Ein Error ist es nicht glaube ich, vielleicht eher ein Hinweis beim Compilieren:
avr-gcc -mmcu=atmega168 -Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT fastPWM.o -MF dep/fastPWM.o.d -c ../fastPWM.c

Könnte ich mir denn die Hex-Datei irgendwie anders (z.B. Online) herstellen lassen und einfach in den default-Ordner kopieren?
Langsam zweifle ich daran, ob ich es überhaupt richtig installiert habe oder ob es auf Windows7 geht. Beides ist aber eher unwahrscheinlich denke ich.
 
Hallo Furu,

Könnte ich mir denn die Hex-Datei irgendwie anders (z.B. Online) herstellen lassen und einfach in den default-Ordner kopieren?
Langsam zweifle ich daran, ob ich es überhaupt richtig installiert habe oder ob es auf Windows7 geht. Beides ist aber eher unwahrscheinlich denke ich.
zippe doch einfach mal deinen Ordner von dem Projekt (also der wo der Quellcode und der Rest von deinem Programm drin ist) und lade es hier hoch oder lade nur den Quellcode hoch. Dann kann mal ein anderer das bei sich ausprobieren und dann wird man ja sehen wo der Hase begraben ist (oder so) ;) Das ist dann ja quasi "Online" :rolleyes:

Gruß
Dino
 
Hi, und danke, habe das Problem mit euren Hinweisen gelöst.
Beim Zugriff auf die Hex-Datei war in der Connect-Anzeige (Siehe Bild, Fenster: Programme - Input HEX File: Dateipfad) auf den falschen Dateipfad gestellt.
Habe jetzt den richtigen genommen es kommt der nächste Fehler ;).

Fehler1.jpg
Bruacht ihr noch meine ganzen Dateien? Habs nicht hochgeladen, weils mir jetzt wieder überflüssig erscheint.
Ist es jetzt ein Fehler in der Hardware?
 
Hallo Furu,

die Fehlermeldung hat nichts mit deiner Software zu tun. Der Programmer kann den Mikrocontroller nicht in den Programming Mode schalten.

Gründe hierfür könnten folgende sein:
  • Programmierer nicht richtig an das Programmierinterface des Mikrocontrollers angeschlossen (Mega168: MOSI=PB3, MISO=PB4, SCK=PB5). RESET\ muss angeschlossen sein, Betriebsspannung muss vorhanden sein (im zulässigen Bereich)
  • Programmiersignale durch Hardware belastet (wenn ja dann mit Widerständen entkoppeln)
  • ISP-Übertragungsrate zu hoch, die muss kleiner als 1/4 des Systemtakts sein (bei unter 12MHz, wenn fclk höher dann sogar 1/6). Fusebit CKDIV8 beachten, der Systemtakt wird hier nochmal durch 8 geteilt, falls das Bit programmiert.
Ich gehe davon aus, dass du den Mikrocontroller noch nicht programmiert hast, die Fuses also in der Werkseinstellung stehen, dann erhält er durch den internen RC Oszillator seinen Systemtakt (etwa 8MHz geteilt durch CKDIV8, also 1 MHz). Deine Übertragungsrate 125kHz sollte also funktionieren.

Vielleicht hilft dir das schon mal weiter.

Gruß,
Dirk
 

Ü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)