Ik ben ondertussen heel de dag bezig met een AVR controller waarvan de fusebits verkeerd zijn geprogrammeerd te deblokkeren.... zonder resultaat...

Ik heb geprobeerd met de schakeling te maken uit de Elektor halfgeleidergids, maar die krijg ik voor geen mm aan de praat. Ik heb geprobeerd de 555-timer van CO te modificeren naar 500KHz, maar die krijg ik niet hoger dan 100KHz, ook zakt het signaalniveau naar 2v wanneer ik hem verbindt met Xtal1 van de controller...

Weet misschien iemand de eenvoudigste manier om dergelijke controller de deblokkeren? (met of zonder externe hulpmiddelen)

De huidige controller is een ATmega48P.

Alvast bedankt voor jullie hulp!

Fons

Heb je niet toevallig een 1MHz oscillatorblikje liggen? Die zijn ideaal hiervoor. Kun je aangeven welke modificatie je hebt uitgevoerd op de 555 oscillator?

Als je een andere microcontroller hebt kun je die gebruiken. Als het een AVR is met CLKOUT fuse kun je die instellen, anders een programma die snel een pin aan en uit zet in een loop.

Een klok van 100kHZ is snel genoeg, als je de programmer-software wat trager laat draaien.
Bij avrdude kan dit met de optie -i xxx. i- 100 lijkt me een goed uitgangspunt.

@mbbneon: 1MHz heb ik niet bij de hand. Aan de 555-schakeling heb ik de elco vervangen door 100nF (tantalium), R1 door 1K en R2 door 220R. Dit geeft een klok van ongeveer 100KHz (op de oscilloscoop afgelezen).
Wanneer ik de weerstanden kleiner maak is er geen signaal meer.

@Alson: Ik heb er nog een tiental liggen, maar aangezien het mijn eerste testjes zijn weet ik niet zo direct hoe zo een programmaatje te schrijven.

@Pros: Het is me net opgevallen dat de controller wel degelijk loopt op het 100KHz signaal, het geprogrammeerde knipperledje is ondertussen al twee maal aangegaan :-). Communicatie met de controller blijkt echter nog steeds onmogelijk. Ik krijg steeds de melding "READLB entry not found". Ik gebruik (voorlopig) MikroC om te schrijven, dat compileer ik naar een hex-file die ik open met AVR-ISP-programmer van MCS-elec (Bascom). De snelheid van deze USB poort heb ik op "1" gezet, ik denk dat dat de laagste is... maar zonder resultaat...

Alleen de CKOUT fuse aanpassen zou bij een ATmega48 voor een 1MHz blokgolf op PB0 moeten zorgen. Wel zorgen dat je niet aan de CKSEL fuses komt ;).

100kHz moet inderdaad ook werken, mits de SPI frequentie van de programmer laag genoeg kan. Ik ben niet bekend met die MCS-elec programmer, staat er niet in de handleiding waar die snelheid voor staat? Het kan ook staan dat het ipv. frequentie voor de periode (1/frequentie) in microseconden staat, zo werkt avrdude bijvoorbeeld.

Thanks voor de tip Alson! Ga ik morgenvoormiddag proberen. Ik laat hier weten of het gelukt is.

Hou er rekening mee, dat er een addertje (of zelfs een boa) onder het gras zit.
Het SPIEN-bit van de Fuse High Byte kan je niet wijzigen via de ISP-weg. Dat is een logische maatregel, want een foutje is snel gemaakt, en als je het serieel programmeren uitschakelt doormiddel van je seriële programmer, zit je in de knoei.
Nu heeft de Fuse High Byte van de ATmegax8 nog een ander bit, dat je dag kan vergallen: RSTDISBL. Als je dat bit 0 maakt, fungeert pin1 (PC6) niet meer als RESET-pin, maar als een gewone I/O-pin. Het resultaat is, dat ISP-programmeren uitgesloten wordt - daarvoor heb je immers de RESET-pin nodig. En daar sta je dan... :-(

Ik ga morgen al die fusebitbetekenissen eens onder de loep nemen... ik heb enkel iets mispeuterd in de fusebits met betrekking tot de kloksnelheid, dus dat zit nog wel goed denk ik...

Inderdaad, dan is HVPP (high-voltage parallel programming) de enige optie. Volgens mij zijn er wel schema's op het internet van een simpele HVPP programmer om de fuses opnieuw in te stellen. Gelukkig worden de klokbits vaker verkeerd gezet dan de RSTDISBL.

Als de klokbron op 32kHz horlogekristal staat werkt een externe blokgolf ook niet, dan heb je echt een 32kHz kristal (of HVPP) nodig.

Dan ga ik al maar eens op zoek naar een HVPP... ik heb zo een vermoeden dat ik dat nog ga kunnen gebruiken in de toekomst :-)

Chip weggooien is waarschijnlijk goedkoper voor de paar keer dat je het gebruikt. De populaire manier is een Atmel STK500 of Dragon, beide zijn niet al te goedkoop. In veel gevallen is een kloksignaal voeden voldoende. RSTDISBL moet je gewoon afblijven tenzij je echt wanhopig om pinnen verlegen zit en niets groters kan gebruiken (en zeker weet dat je software geen fouten meer bevat).

Zo'n DIY schakeling zoals dit of dit kan handig zijn als je de onderdelen hebt liggen, maar probeer eerst gewoon een kloksignaal, grote kans dat dat gewoon werkt.

08:11u... gelukt!! :-) (met de clkout van een tweede controller)

Tot hier toe al heel erg bedankt!

Maar hoe laat ik dat ding nu lopen aan 20MHz? Volgens de datasheet moet dat kunnen. Maar bij de fusebits kan ik blijkbaar maximaal 8MHz selecteren. (en zo is alle miserie begonnen)

Dat hangt er inderdaad aan... maar dan moet ik toch ook die fusebits nog zetten?! Of is dat niet nodig???

Ja, op een high speed Xtal. Staat toch uitgekauwd met 'schema' en al in de datasheet!?!

Op 6 augustus 2011 21:06:44 schreef pros:
Hou er rekening mee, dat er een addertje (of zelfs een boa) onder het gras zit.
Het SPIEN-bit van de Fuse High Byte kan je niet wijzigen via de ISP-weg. Dat is een logische maatregel, want een foutje is snel gemaakt, en als je het serieel programmeren uitschakelt doormiddel van je seriële programmer, zit je in de knoei.
Nu heeft de Fuse High Byte van de ATmegax8 nog een ander bit, dat je dag kan vergallen: RSTDISBL. Als je dat bit 0 maakt, fungeert pin1 (PC6) niet meer als RESET-pin, maar als een gewone I/O-pin. Het resultaat is, dat ISP-programmeren uitgesloten wordt - daarvoor heb je immers de RESET-pin nodig. En daar sta je dan... :-(

D'r is nog een 3e manier van verpesten: De interne klok zo laag zetten dat je programmer hoe dan ook te snel praat...

Gelukkig was het in mijn geval een attiny13.

Ondertussen heb ik hier een exemplaar liggen dat niet meer te deblokkeren is...
Ik had bij de clockfuses "00000" genomen (dacht ik) "external clock" zonder opgave van frequentie...

"high speed xtal" zag ik niet voorkomen in de selectiemogelijkheden...

Dat is inderdaad 'external clock', aldus de datasheet...

De geblokkeerde controllers zijn niet meer los te krijgen... het is me opgevallen dat het niveau van het extern clocksignaal (clkout van de tweede controller) naar 2V daalt wanneer ik het aan xtal1 van de eerste controller aansluit...

Bijna tijd om er een hamer bij te nemen?! :-)

Heb je nu al meer den één AVR mishandeld?

dat het niveau van het extern clocksignaal (clkout van de tweede controller) naar 2V daalt wanneer ik het aan xtal1 van de eerste controller aansluit

XTAL1 is nochtans een hoogohmige ingang. Enkel als de µC op zijn interne klok draait, en het lopend programma PB6 als uitgang schakelt, wordt de pin laagohmig.

Als je de klokbits op 0000 hebt gezet, moet het gewoon werken met een externe klok.

Ja Pros... ondertussen zijn er twee mishandeld... :-)
Bij de ene zakt het clockniveau naar 2V, bij de andere blijft het 5V. Maar geen van beiden zijn nog te deblokkeren.

Ik sluit een xtal van 20MHZ aan parallel op pin 9 en 10, van beide pinnen een C'tje van 18pF naar massa. Vervolgens wijzig ik enkel de fusebit "KLA987" naar "000000 external clk..."

en dan is het gedaan, het programmatje dat er in zit loopt nog wel, maar volgens mij nog steeds op de interne 8MHZ, en verdere communicatie met de controller is niet meer mogelijk.

Wacht eens even... Je zet twee maal de klok-bits op 0000?! Dat je die fout één maal maakt, kan ik nog begrijpen. Dat is een valstrik waar al menigeen is ingelopen.
Voor een extern kristal van 20MHz bij een ATmegax8 zet ik de Fuse Low Byte op 0x57. De klok-bits staan dus op 0111 (0110 zou ook moeten werken).Daar is meteen CKDIV8 mee uitgeschakeld, en loopt het programma op z'n hoogste snelheid.

Als het programma nog loopt, en je de µC niet meer kan programmeren, is er wel iets raars aan de hand. Heb je iets aan de Fuse High Byte gewijzigd?

Nee, al zou ik het wel durven, ik heb de klok-bits maar één keer op 000000 gezet :-). Het 2de ic ligt hier al langer werkloos. Low- en high byte zijn me niet helemaal duidelijk aangezien de fusebits hier met 6bits weergegeven worden

Standaard staan die op 100010 (int RC osc 8MHz)
Ik had ze gezet op 000000 (ext clock...)
Waarschijnlijk moet dat dan zijn 100111 (ext full swing crystal...)!!??

Yep! "Ext full swing crystal" is hetgeen je moet instellen bij een 20MHz kristal.