Hi, Ich habe heute versucht meine frischen Boards für den 841 zu testen. Immerhin habe ich Bascom hinbekommen (DAT-File vom 441 geändert) und AVRdude redet auch mit dem Ding, Device ID passt also, ISP funktioniert prinzipiell. Aber das Verify geht immer schief und zwar beim ersten Byte. Hab es jetzt nicht mehr im Kopf aber es ist immer der gleiche Wert, der mit dem File nicht übereinstimmt. Also sowas wie Address $0000 $AB does not Match $CD. Immer gleich. Sieht also nicht nach Hardware aus. Die Config von AVRdude habe ich mit den Infos aus diesem Thread gepimpt: http://www.avrfreaks.net/forum/need-help-using-attiny841-avrdude Bei denen scheint es ja zu funktionieren und so halb geht es hier ja auch. Device Signature wird erkannt, er schreibt und liest aber dann schlägt das Verify fehl. Ich programmiere mit Tiny-USB und nutze ein Script für AVRdude (ist 6.0.1): C:\avrdude -p t841 -c usbtiny -P usb -B 20 -e -u -U flash:w:%1:r Also auch schon ganz schön langsam. Die Fusebits habe ich bisher nicht angefasst. Da das gelesene falsche Byte immer gleich ist (und nicht FF oder 00), gehe ich davon aus, daß die Hardware ok ist und das Problem eher bei AVRdude angesiedelt ist. Hat jemand ne Idee? Gruß, Norbert
Vielleicht hilft dieser Artikel: http://www.ve7xen.com/blog/2014/03/07/programming-the-attiny841-with-avrdude/
Norbert S. schrieb: > das Problem eher bei AVRdude angesiedelt ist. Und warum schließt du den USBtiny als mögliches Problem aus? Durch dessen Firmware muss schließlich der eigentliche Programmier- und Lesevorgang erfolgen; AVRDUDE erzählt ihm nur, was er tun soll.
Hi, @Jörg: Weil der USBtiny mit anderen AVR funktionier und ich mir nicht vorstellen kann, daß Atmel da so massiv ändert, daß das nun damit nicht mehr gehen soll. Wenn nichts mehr geholfen hätte, wäre ich sicher mal mit nem orignal Atmel MKII ran gegangen. @Stefan: Bingo! Der erste Absatz beschreibt ja exakt meine Situation bis vor ein paar Minuten. Er verlinkt ja auch auf den gleichen Thread wie ich oben und nutzt auch USBtiny. Mit seiner Config funktioniert es jetzt. Da sind ein paar Werte etwas anders oder fehlen aber was das ist, hinterfrage ich jetzt erstmal nicht weiter. Immerhin ist da das extended Fusebyte korrigiert. Mit folgendem Programm
1 | $regfile = "ATtiny841.DAT" |
2 | |
3 | $crystal = 1000000 'Internal RC |
4 | |
5 | $hwstack = 100 |
6 | $swstack = 16 |
7 | $framesize = 16 |
8 | |
9 | Ddrb.2 = 1 |
10 | Led Alias Portb.2 |
11 | Ddra.7 = 1 |
12 | Porta.7 = 1 |
13 | |
14 | Do |
15 | Toggle Led |
16 | Waitms 1 |
17 | Loop |
ist LED für etwa 10ms schön mit 500Hz und Pa.7 geht an, dann ist für ca. 17ms alles aus. Watchdog, würde ich sagen, da muß ich mich wohl als nächstes mal mit den Fuses befassen. Irgendwo hatte ich gelesen, daß das DDR nicht mehr bestimmt, ob Ausgang oder Eingang aber entweder berücksichtigt Bascom das schon oder die Info ist falsch. Bei dem Ding ist echt so vieles anders aber ich glaube die Mühe lohnt sich. 95% meiner Bastelanwendungen decke ich damit ab und So-14 finde ich auch sehr symphatisch. Wäre cool, wenn einer aus dem AVRdude-Team das mal offiziell und vor allem komplett richtig in die Config einfügen könnte. Ob bei dieser Version wirklich alles richtig ist, weiß ja jetzt auch keiner. Meine Möglichkeiten übersteigt das leider. Gruß, Norbert
Nachtrag: mit:
1 | $regfile = "ATtiny841.DAT" |
2 | |
3 | $crystal = 1000000 'Internal RC |
4 | |
5 | $hwstack = 100 |
6 | $swstack = 16 |
7 | $framesize = 16 |
8 | |
9 | Ddrb.2 = 1 |
10 | Led Alias Portb.2 |
11 | |
12 | Dim I As Byte |
13 | |
14 | Do |
15 | Toggle Led |
16 | For I = 1 To 250 |
17 | wdr |
18 | Waitms 2 |
19 | Next |
20 | Loop |
blinkt die "Hello World" Led herrlich mit 1Hz. Ist also der Watchdog. Danke nochmal! Gruß, Norbert
Norbert S. schrieb: > Wäre cool, wenn einer aus dem AVRdude-Team das mal offiziell und vor > allem komplett richtig in die Config einfügen könnte. Warum nicht einer derjenigen, die auch einen ATtiny841 in den Fingern halten? Ich hab' keinen, ich kann mir das also nur aus den sprichwörtlichen Fingern saugen, oder aber mich drauf verlassen, was Leute liefern, die einen haben. Bislang ist das offiziell (also hier: https://savannah.nongnu.org/patch/?group=avrdude) : nichts.
:
Bearbeitet durch Moderator
Bei mir hat es letztes Jahr auch damit sofort geklappt. Nutze den USBasp.
Hi, Lesen bildet ja bekanntlich, so auch hier. Die Fuse für den WD ist default aus, das ist aber nur die halbe Wahrheit. Das WDE Bit ist im Datenblatt als default "X" angegeben. Ohne jetzt hier das Datenblatt wiedergeben zu wollen, man soll/muß den definitiv am Anfang ausschalten, wenn man ihn nicht will. Das muß in einer bestimmten Prozedur erfolgen, in Bascom sieht das dann so aus: 'WDT off: wdr Mcusr.wdrf = 0 'WD Reset flag Ccp = &HD8 'Enable protected registers Wdtcsr.wde = 0 'WD Disable Und schon geht's auch mit Waitms 500. Man kann den WDT auch so konfigurieren, daß er nur einen Int auslöst und keinen Reset. Damit kommt man ohne externen Int wieder aus dem Powerdown raus. Sehr sexy für Batteriebetrieb mit ca. 1,5µA. Kollege meinte allerdings, andere neuere AVR könnten das auch. Damit läuft das Ding ja auch mit ner Knopfzelle ewig. Ich hoffe nur, daß da nicht noch zu viele solcher Stolpersteine kommen. Jörg Wunsch schrieb: > Norbert S. schrieb: >> Wäre cool, wenn einer aus dem AVRdude-Team das mal offiziell und vor >> allem komplett richtig in die Config einfügen könnte. > > Warum nicht einer derjenigen, die auch einen ATtiny841 in den Fingern > halten? Meine Fähigkeiten übersteigt das leider. Jörg, Du hast ja Deine Finger da mit drin. Ich hab ein paar von den Käfern und hab mir gerade in China mein kleines Breakoutboard machen lassen. Ich kann Dir eins bestückt und getestet schicken, natürlich mit Schaltplan und Layout. Schaltplan hab ich mal angehängt. Ich würde das dann als Spende für AVRdude betrachten. Gruß, Norbert
Nutze avrdude seit langem erfolgreich mit den T841 und mySmartUSB light. Keine Probleme soweit. Die Config Anpassung von avrdude wurde hier in anderen Threads schon besprochen und ist an sich auch so einfach dass es kein generelles Problem darstellt. Trotzdem wäre es natürlich schön wenn in zukünftigen avrdude versionenen da ganze schon integriert wäre. Wie genau könnte man eine funktionierende Config dazu beisteuern?
Cyblord ---- schrieb: > Wie genau könnte man eine funktionierende Config dazu beisteuern? Am besten natürlich als diff gegen die avrdude.conf.in des aktuellen SVN-Standes. Aber im Prinzip genügt auch das entsprechende Schnipselchen. Bitte auf einer aktuellen AVRDUDE-Version aufsetzen. Es ist dabei auch völlig OK, das "device chaining" zu benutzen, also auf einen anderen Eintrag mit ansonsten vergleichbaren Daten zu verweisen und dann nur die Dinge abzuändern (mindestens die Id und Signatur), die gegenüber demjenigen wirklich anders sind. Entsprechende Beispiele gibt es ja im aktuellen avrdude.conf zur Genüge.
:
Bearbeitet durch Moderator
Cyblord ---- schrieb: > Nutze avrdude seit langem erfolgreich mit den T841 und mySmartUSB light. > Keine Probleme soweit. Hi, in dem von mir zuerst verlinkten Thread geht das ja scheinbar auch mit anderen Programmern. Dem Blog und meiner Erfahrung nach aber eben nicht mit USBtiny sondern nur mit der Config aus dem Blog. Das sollte vielleicht berücksichtigt werden aber fragt mich nicht, woran das liegen könnte. Wenn ich eine neue Version mit USBtiny testen soll, nur her damit, mache ich sofort. AVRdude ist bei mir topaktuell. Gruß, Norbert
@Norbert Ich will Dich nicht porös machen, aber: In Deinem Schaltplan hast Du einen Quarz, der schon die Kapazitäten mit im Gehäuse hat. Wenn Du "draußen dran" noch extra welche parallel hast, dann wird deren Gesamt- kapazität u.U. so hoch, daß der Quarz nicht mehr anständig schwingt. Nicht, daß das Deinen Ärger verursacht. MfG Paul
Hallo Paul, nein, alles gut! Das ist nur alternative Bestückung für einen Resonator oder Quarz. Bei Resonator eben ohne Cs. Quarz nur, wenn ich Uart mit schellerer Baudrate brauche. Für viele Anwendungen lasse ich das sogar ganz weg weil intern 1 oder 8MHz reichen. Ebenso der Spannungsregler. Bei dem was jetzt ansteht habe ich meist 5V sowieso schon, dann wird der auch nicht bestückt. Das ist meine persönliche T841-Platine, die ich für alle möglichen Sachen verwende. Bestellt bei http://www.3pcb.com und das war so dermassen billig und hat so super geklappt, daß ich das nur empfehlen kann. Man muß nur etwas zusammen bekommen, damit die Versandkosten das nicht killen aber auch das geht. Nach 10 Tagen war das hier (nicht Werktage!). Aber danke für dein waches Auge. Liebe Kindlein zuhause: Nicht nachmachen! So wie im Schaltplan würde das natürlich nicht funktionieren! Gruß, Norbert
:
Bearbeitet durch User
Norbert S. schrieb: > Liebe Kindlein zuhause: Nicht nachmachen! So wie im Schaltplan würde das > natürlich nicht funktionieren! Och, die zusätzlichen 22pF sind kein Problem. Norbert S. schrieb: > Das ist meine persönliche T841-Platine, die ich für alle möglichen > Sachen verwende. Hast Du ein Layout, eine übrig?
Hi, das kann vielleicht funktionieren aber wozu sollte man bei einem Reso noch Cs drauflöten. Nachher ist der Kummer groß wenn es doch nicht geht. Solche Kandidate haben dann ja oft auch kein Oszi. Layout kannste haben, anbei als pdf und Target. So wirklich über hab ich aber keine davon. Gruß, Norbert
Norbert S. schrieb: > Quarz nur, wenn ich Uart mit schellerer Baudrate brauche. Es ist ein Gerücht, dass höhere Baudraten genauere Taktraten bräuchten. RS-232 funktioniert mit maximal 2 % Baudratenfehler, ganz unabhängig von der Baudrate, und das schafft ein x-beliebiger Keramikresonator locker.
Hi, ich meinte Baudratenquarz. Bei hohen Baudraten haut das auch bei 16MHz Keramikresonator nicht mehr hin. Wobei ich 2% schon ziemlich grenzwertig finde. Das müssen wir hier aber nicht weiter vertiefen. Hier geht es ja um den Tiny 841 und wenn ich da spezielle Neuigkeiten habe, schreibe ich das hier, damit auch andere das vielleicht finden. Gruß, Norbert
Norbert S. schrieb: > Bei hohen Baudraten haut das auch bei 16MHz Keramikresonator nicht mehr > hin. Doch: 1 MBaud bekommst du damit völlig problemlos hin, ohne systematischen Fehler. ;-) (Ja, es gibt auch Gegenseiten, die das können, FTDI zum Bleistift.) > Wobei ich 2% schon ziemlich grenzwertig finde. Warum? Du hast ein Startbit, 8 Datenbits, eventuell noch ein zätzliches Paritätsbit. Bei 2 % Fehler hast du jetzt 20 % Verschiebung der letzten relevanten Flanke zwischen Sender und Empfänger. Wenn der Empfänger auch nur halbwegs im Bereich von 50 % der Taktperiode abtastet, ist er noch sehr weit von der Flanke weg. Ja, gut, Resonatoren mit „baudratenfreundlichen“ Frequenzen sind wohl nicht ganz so reichlich gesät, daran hatte ich nicht gedacht. Quarze sind da leichter aufzutreiben.
Hi, ich würde den Thread nur ungern per Uart zerreden. Selbst mit weniger als 2% bin ich schon auf die Schnauze gefallen. Meine pesönliche Schmerzegrenze ist etwas unter 1%. Für Basteleien kann man sagen "geht" und gut is. Absichtlich würde ich sowas mit 2% aber nie planen, wenn ich nicht genau weiß, wie oft und wann die Gegenstelle sampled. 4% kann auch gehen, keine Frage. Wenn die Bastelei damit funktioniert - Ok. Baudratenresonatoren hab ich noch nie gesehen... Gruß, Norbert
Norbert S. schrieb: > Hier geht es ja um den Tiny 841 Bei 3-4V ist dessen interner Oszillator von Haus aus bis 38400 verwendbar wenn man die Arktis meidet, oder 76800 wenns die Gegenstelle kann. Wenn man Zeit für Kalibrierung hat, dann kriegt man damit auch die Baudratenfrequenz 7,37xMHz für 115kbd zustande, und 5V Betrieb. > Baudratenresonatoren hab ich noch nie gesehen... 8MHz ist mit 0,2% Fehler keine üble Frequenz dafür. Genauer ist der Resonator sowieso nicht. Mit 12MHz sind auch 115kbd kein Problem.
:
Bearbeitet durch User
Hi, ich hatte ja geschrieben, daß ich berichten wollte, welche Überraschungen der T841 noch so hat. Ich wollte jetzt mal die erste richtige Anwendung starten, eine Servoelektronik. Nur nicht mit Poti als Rückmeldung sondern mit einer Codierscheibe und Gabellichtschranke weil das mechanisch günstiger ist. Für mein Endstufen IC SI9986 brauche ich zwei PWM-Ausgänge. Prima, hat Timer0 ja und 8bit Auflösung reichen. Aber wo sind die OCnX Ausgänge? TOCCn sollen die Output Compare Channel sein aber warum sind die von 0 bis 7 durchnummeriert, für 6 PWM? Bei Timer0 wurde ich nicht schlau draus aber ich kann nicht beschwören, daß ich einen Hinweis darauf nicht überlesen habe. Edit: Ich Volltrottel. Das ist auch bei Timer0 beschrieben, hab ich komplett übersehen. Dann hab ichs gefunden, beschrieben bei Timer1/2: Die OCnX werden auf die TOCCn-Pins gemappt und diese müssen dann noch enabled werden. Sehr cool, wenn man's weiß. Ob alles weitere mit der PWM dann wieder straight forward so wie bisher ist, werde ich dann in den nächsten Stunden merken. Atmel scheint da wirklich einige neue Wege eingeschlagen haben, ohne, daß ich davon was mitbekommen hätte. Ich kenne mittlerweile die relativ aktuelle Mega324-Familie ganz gut aber die scheint dagegen ja fast schon rückständig. Weiß einer was von einem Mega der ähnlich den 324/644 und auf einem ähnlichen Stand wie die 441/841 ist? Das Ding ist echt klasse. Man kann ihn für die Anwendung durch das Mapping spezialisieren, hat keinen Riesenkäfer auf der Bastelplatine und nicht div. µC Cotroller für Spezialitäten in der Bastelkiste weil man hier mal 2 Uarts braucht oder da mal 6x PWM. Gruß, Norbert
:
Bearbeitet durch User
Ja das mit der PWM hatte ich auch erst innerhalb von 3 Stunden kapiert.
Hi, blöder Mist, irgendwas übersehe ich da noch. Controller läuft, Timer läuft (LED klackern in einer OVF-ISR) aber bei der PWM tut sich nichts. Hier ist mal das Testprogramm, auch anbei als rtf wegen Syntax. Das sollte auch jeder C-Menschlesen können, es geht ja nur um die Register und ich hab brav kommentiert:
1 | $regfile = "ATtiny841.DAT" |
2 | $crystal = 8000000 'Internal RC |
3 | 'Low fuse 11100010, 0xE2, Div8 disabled, internal 8MHz |
4 | 'High Fuse 11011100, 0xDC BOD set to 4,3V |
5 | $hwstack = 100 |
6 | $swstack = 16 |
7 | $framesize = 16 |
8 | |
9 | 'WDT off: |
10 | Reset Watchdog |
11 | Mcusr.wdrf = 0 'WD Reset flag |
12 | Ccp = &HD8 'Enable protected registers |
13 | Wdtcsr.wde = 0 'WD Enable off |
14 | |
15 | 'Timer0 in PWM-Mode 1, Phase Correct PWM: |
16 | Tccr0b.wgm02 = 0 |
17 | Tccr0a.wgm01 = 0 |
18 | Tccr0a.wgm00 = 1 |
19 | |
20 | 'OC0A and B Clear OC0X on Compare Match when up-counting. Set OC0B on Compare Match |
21 | 'when down-counting. |
22 | 'This gives a PWM with the half frequency of the Timer0 |
23 | Tccr0a.com0a1 = 0 |
24 | Tccr0a.com0a0 = 1 |
25 | Tccr0a.com0b1 = 0 |
26 | Tccr0a.com0b0 = 1 |
27 | |
28 | 'Clock prescaler 8. This gives a Timer frequency of 8,000,000/256/8 = 3906Hz. |
29 | 'PWM Frequency 1953Hz Phase Correct |
30 | Tccr0b.cs02 = 0 |
31 | Tccr0b.cs01 = 1 |
32 | Tccr0b.cs00 = 0 |
33 | |
34 | 'For OC0A Pin5 PB.2 TOCC7, OC01 Pin6 PA.7 TOCC6, this is the default mapping |
35 | 'To Be sure: |
36 | Tocpmsa1.tocc7s1 = 0 |
37 | Tocpmsa1.tocc7s0 = 0 |
38 | Tocpmsa1.tocc6s1 = 0 |
39 | Tocpmsa1.tocc6s0 = 0 |
40 | |
41 | 'Enable Channels: |
42 | Tocpmcoe.tocc7oe = 1 |
43 | Tocpmcoe.tocc6oe = 1 |
44 | Ddrb.2 = 1 |
45 | Ddra.7 = 1 |
46 | |
47 | 'Pin 11 PortA.2 for LED |
48 | Ddra.2 = 1 |
49 | Led Alias Porta.2 |
50 | |
51 | On Timer0 T0int |
52 | Enable Timer0 |
53 | Enable Interrupts |
54 | |
55 | Do |
56 | Ocr0a = 50 |
57 | Ocr0b = 150 |
58 | |
59 | Waitms 2000 |
60 | |
61 | Ocr0a = 100 |
62 | Ocr0b = 200 |
63 | |
64 | Waitms 2000 |
65 | Loop |
66 | |
67 | T0int: |
68 | Led = 1 |
69 | Waitus 50 |
70 | Led = 0 |
71 | Return |
Der Int vom Timer funzt, LED blitzt alle 500ms also mit 2kHz für 50µs auf. Der Timer zählt also mit 8MHz/8, 8bit, einmal rauf und wieder runter bis der Int zuschlägt. Macht 2kHz. Bis zur Phase Correct PWM stimmt es also. Nur tut sich an den TOCC6 und 7 nichts. Was habe ich da noch übersehen? Gruß, Norbert
Hi, ich habe hier: http://bascom-forum.de/showthread.php?6511-ATTiny841-PWM-Timer0&p=52968#post52968 auf diesen Beitrag verwiesen. Von wegen Crossposting... Gruß, Norbert
Norbert S. schrieb: > 'OC0A and B Clear OC0X on Compare Match when up-counting. Set OC0B on > Compare Match > 'when down-counting. > 'This gives a PWM with the half frequency of the Timer0 > Tccr0a.com0a1 = 0 > Tccr0a.com0a0 = 1 > Tccr0a.com0b1 = 0 > Tccr0a.com0b0 = 1 > Was habe ich da noch übersehen? Das obige Konfiguration nicht das macht, was du dazu geschrieben hast!
Hallo, setze mal das Register: Tccr0a = &B1010_0001 und die Output Compare Register 0A/=B auf einen Anfangs-Wert Ocr0a = 155 Ocr0b = 64 So sollte es funktionieren. Gruß biker10
Hi, oh mann, genau sowas hatte ich vermutet. mwp schrieb: >> 'OC0A and B Clear OC0X on Compare Match when up-counting. Set OC0B on >> Compare Match >> 'when down-counting. >> 'This gives a PWM with the half frequency of the Timer0 >> Tccr0a.com0a1 = 0 >> Tccr0a.com0a0 = 1 >> Tccr0a.com0b1 = 0 >> Tccr0a.com0b0 = 1 > >> Was habe ich da noch übersehen? > > Das obige Konfiguration nicht das macht, was du dazu geschrieben hast! Ich hab da wohl 1000 mal draufgeglotzt und es nicht gesehen. Damit hab ich "WGM02 = 0: Normal Port Operation, OC0A Disconnected." eingestellt. Dabei hab ich extra die Reihenfolge im Datenblatt eingehalten aber nein, ich war trotzdem doof genug Com0X0 und Com0X1 zu vertauschen. Kaum macht man es richtig, schon funktioniert es! VIELEN DANK! Für solche Lösungen liebe ich dieses Forum. Ich hatte mich schon damit abgefunden, erstmal eine Soft-PWM zu basteln. Hätte hier erstmal gereicht aber datt sieht ja nich aus. Edit: PWM funktioniert also ansonsten offensichtlich so wie man es von den AVR kennt. Zumindest Phase Correct. Gruß, Norbert
:
Bearbeitet durch User
Aber das macht den 841 auch gleich so klasse. Man kann die Sachen so zu sagen dahin mappen wo man es braucht und man hat mehr Freiheiten beim layouten.
Hi, im Bascom Forum wurde ich angepflaumt: "Cross-Poster. Sollen wir nun in dem anderen Forum herumsuchen? Hätte was beizutragen, aber so nicht." Sowas kenne ich eigentlich nur von hier ;-) Kann mich mal einer aufklären, was ich da falsch gemacht habe? Zwei Foren befragt und jeweils auf den Beitrag im anderen Forum verlinkt. Wie macht man es denn nun richtig, wenn man mehrere Quellen anzapfen will? Gruß, Norbert
Norbert S. schrieb: > Kann mich mal einer aufklären, was ich da falsch gemacht habe? Es gilt einfach als unhöflich, sich selbst so weit in den Mittelpunkt zu rücken, dass das eigene Problem soooo wichtig ist, dass man in zwei Foren danach fragt. Entscheide dich einfach für ein Forum, und lediglich, wenn du dort in einer sinnvollen Zeit keine Antwort bekommst, dann noch eine Anfrage in einem anderen Forum (unter Hinweis auf den anderen unbeantworteten Thread).
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.