Atmega168 uitlezen en lock bits

Pagina: 1
Acties:

Vraag


Acties:
  • +1 Henk 'm!

  • Atlantis01
  • Registratie: Augustus 2010
  • Laatst online: 15-07 23:40
Beste Tweakers,

Onlangs is de elektrische golf trolley van mijn broer defect geraakt. Deze trolley wordt niet meer door de leverancier geproduceerd en er zijn ook geen onderdelen meer van te krijgen.

Ik heb de trolley inmiddels uit elkaar gehaald en het PCB elektrisch doorgemeten.
Het blijkt dat de AtMega168 (hart voor de aansturing) teveel stroom uit de voeding trekt.
Vcc = 4V en Avcc = 2.7V. Volgens de datasheet zouden deze twee spanningen gelijk moet zijn.

Verder zit er ook een OpAmp circuit op dat zorgt voor de batterijspanning uitlezing. De uitgang van de OpAmp laat de juiste spanning zien (3.3V). De uitgang van de OpAmp zit met 10kOhm aan de AtMega168 ADC6 pin.
Linkerkant van de 10kOhm ziet 3.3V terwijl de andere kant (kant van de ADC6 pin) 1.9V is.

Dit kan er alleen maar op duiden dat de AtMega168 defect is geraakt. ESD schade?

Nu heb ik nog eenzelfde goed werkende trolley en wil bij deze AtMega168 de bootloader+flash memory uitlezen middels USB AVR ISP programmer + Avrdude.
Ik wil puur de binary/hex hebben om deze terug te kunnen flashen in een nieuwe AtMega168. (Ik ben niet geïnteresseerd in de source code).

Echter heb ik via google gevonden dat de AtMega168 middels lock bits en bootloader lock bits gelocked kan zijn en hierdoor kan er niet meer gelezen worden van de chip.

Er schijnt wel een manier te zijn om de lock bits "uit te zetten" zonder dat daarbij bootloader + flash memory wordt gewist. Weet iemand hier op het forum hoe dat werkt? Of iemand die dat bij deze chip kan doen?
Ik wil er ook wel voor betalen.

Bedankt alvast voor jullie reacties.

Alle reacties


Acties:
  • 0 Henk 'm!

  • Zyk
  • Registratie: Mei 2023
  • Laatst online: 13:37

Zyk

Je kunt eerst gewoon uitlezen proberen. Mochten de fuses zodanig ingesteld staan dat dat niet mogelijk is, dan ondersteunen veel AVR’s een “high voltage programming mode” waarmee je de fuses alsnog kunt herprogrammeren.

Het is voor mij een tijdje geleden, alles op eigen risico.

Acties:
  • 0 Henk 'm!

  • Atlantis01
  • Registratie: Augustus 2010
  • Laatst online: 15-07 23:40
Hi Zyk,

Bedankt voor je reactie.
De AVR ISP programmer heb ik inmiddels besteld en verwacht deze dinsdag of woensdag binnen te hebben.
Ik zal dan meteen even kijken of ik de AtMega kan uitlezen.

Acties:
  • 0 Henk 'm!

  • memphis
  • Registratie: Oktober 2000
  • Laatst online: 13:48

memphis

48k was toen meer dan genoeg.

Atlantis01 schreef op zondag 26 januari 2025 @ 16:24:

Ik heb de trolley inmiddels uit elkaar gehaald en het PCB elektrisch doorgemeten.
Het blijkt dat de AtMega168 (hart voor de aansturing) teveel stroom uit de voeding trekt.
Vcc = 4V en Avcc = 2.7V. Volgens de datasheet zouden deze twee spanningen gelijk moet zijn.
Je hebt een 2e zeg je, heb je daar ook de VCC en AVCC gemeten? En als je dat gaat doen meet dan ook de weerstand tussen de 2 punten en de weerstand naar massa (bij een dezelfde polarisatiemeeting met je multimeter). Deze AVCC en VCC hoeven niet hetzelfde te zijn, de AVCC is de spanningsvoorziening van het analoge deel (A/D D/A converters) wat dan ook mogelijk je spanningsprobleem op de analoge ingang kan verklaren. Maar in de datasheet staat ook dat deze middels een filter verbonden moeten worden, in veel gevallen is dit gewoon een spoeltje en die kunnen wel eens kapot gaan. Zoek dat spoeltje eens op en meet die door, die zou laagohmig moeten zijn. Als test zou je dat spoeltje met een draadje kunnen overbruggen.

Er zijn mensen die mij een GOD vinden


Acties:
  • 0 Henk 'm!

  • Atlantis01
  • Registratie: Augustus 2010
  • Laatst online: 15-07 23:40
Hi Memphis,

Bedankt voor je reactie. Ik heb ook op het werkende PCB gemeten.
Op de 10kOhm van Opamp naar ADC6 staat aan beide kanten dezelfde spanning 3.4V.

Op het niet-werkende PCB al het volgende gedaan.
- Spoel op Avcc kortgesloten, maar dat hielp niet. De spoel meet een hoogomhige weerstand, maar dat is hetzelfde op het werkende PCB.

Ik zal nog even de spanning van Vcc en Avcc op het goede PCB bekijken.
Weerstand van Avcc naar Vcc en van beide naar GND zal ik even bekijken.

Acties:
  • 0 Henk 'm!

  • memphis
  • Registratie: Oktober 2000
  • Laatst online: 13:48

memphis

48k was toen meer dan genoeg.

Als de spanning bij AVCC zo ver omlaag wordt getrokken zou je verwachten dat de VCC mee moet gaan.

En als het een hoge belasting is zou je dat in temperatuur moeten kunnen meten, of als je een FLIR hebt ook kunnen zien.

Er zijn mensen die mij een GOD vinden


Acties:
  • +1 Henk 'm!

  • Atlantis01
  • Registratie: Augustus 2010
  • Laatst online: 15-07 23:40
Ik heb de metingen gedaan.

Op het goede PCB.

Vcc = 4.83V (Er zit een 10 Ohm weerstand op het PCB tussen de 5V LDO uitgang naar Vcc)
Stroom in Vcc = 15mA (4.98-4.83)/10

Avcc = 4.16V maar voor de spoel 4.98V (5V LDO uitgang)

Vcc - GND meet ik 10.5kOhm.

Spoel meet 6MOhm ?

Tussen Vcc en Avcc meet ik een diode van 0.7V
Het lijkt er dus op dat de Avcc gevoed wordt door de interne diode vanaf Vcc aangezien de spoel 6MOhm meet en er vanuit deze kant dus geen stroom naar Avcc kan. Zou het goede PCB dus op de langere termijn ook defect raken?


Op het defecte PCB.

Vcc = 4V (Er zit een 10 Ohm weerstand op het PCB tussen de 5V LDO uitgang naar Vcc)

Stroom in Vcc = 98mA (4.98-4.0)/10

Avcc = 2.7V (voor de spoel 4.98V LDO uitgangsspanning )

Vcc - GND meet ik 1.1kOhm

Spoel meet hier ook ongeveer 6MOhm.

Acties:
  • 0 Henk 'm!

  • Atlantis01
  • Registratie: Augustus 2010
  • Laatst online: 15-07 23:40
Het schema lijkt heel erg op dit schema.

https://github.com/seamat...master/SM-BLDC318H-V1.pdf

Het middelste gedeelte van het schema (LM339 gedeelte) zit er niet in, aangezien de motor hal-sensoren heeft voor de positie bepaling.

Ik zie trouwens dat ze in dit schema een 10 Ohm weerstand in plaats van een spoel hebben gebruikt op Avcc voor de low-pass filtering.

Zal ik de spoel voor de zekerheid vervangen voor een 10 Ohm weerstand?

(Mijn vermoeden is dat de waarde van de spoel 10uH is, omdat dit een aanbeveling van Atmel is)

Acties:
  • 0 Henk 'm!

  • memphis
  • Registratie: Oktober 2000
  • Laatst online: 13:48

memphis

48k was toen meer dan genoeg.

Nee, beide hebben een dezelfde effect, een spoel in de vorm van een L-C filter filtert wat alleen sterker dan een R-C filter, dat is nodig wil je op de A/D converter geen rommel van de voedingsspanning hebben.

Gezien het stroomverbruik en daarmee de spanningsverlies dan moet het haast wel de processor zijn, maar dan moet je ook wel een verhoogde temperatuur op de Atmel kunnen voelen.

Er zijn mensen die mij een GOD vinden


Acties:
  • 0 Henk 'm!

  • naarden 4ever
  • Registratie: Juni 2010
  • Laatst online: 16-09 10:04
Heb je dit gemeten zonder spanning op het pcb? Een spoel zou een lage weerstandswaarde moeten geven.
Tussen Vcc en Avcc meet ik een diode van 0.7V
Het lijkt er dus op dat de Avcc gevoed wordt door de interne diode vanaf Vcc aangezien de spoel 6MOhm meet en er vanuit deze kant dus geen stroom naar Avcc kan. Zou het goede PCB dus op de langere termijn ook defect raken?
Volgens de datasheet is dat inderdaad niet in orde:
The ADC has a separate analog supply voltage pin, AV CC. AVCC must not differ more than ±0.3V from VCC . See the Section 21.5 “ADC Noise Canceler” on page 211 on how to connect this pin.
Bron: https://ww1.microchip.com...8-ATmega168_Datasheet.pdf, pagina 204

Op pagina 7 van de datasheet wordt geschreven dat AVcc via een low-pass filter moet worden verbonden met Vcc. De spoel is waarschijnlijk onderdeel van deze low-pass filter.
Op het defecte PCB.

Vcc = 4V (Er zit een 10 Ohm weerstand op het PCB tussen de 5V LDO uitgang naar Vcc)

Stroom in Vcc = 98mA (4.98-4.0)/10

Avcc = 2.7V (voor de spoel 4.98V LDO uitgangsspanning )

Vcc - GND meet ik 1.1kOhm

Spoel meet hier ook ongeveer 6MOhm.
Met deze parameters kan het goed zijn dat de microcontroller niet meer lekker werkt, maar niet stuk hoeft te zijn. De hogere stroom is wat zorgelijk, maar het hoeft niet meteen een inwendige kortsluiting aan te duiden, 100mA kan de MCU nog wel overleven.

De sterk afwijkende AVcc kan ervoor zorgen dat de inputs/outputs op ADC6, ADC7, en PC0-PC3 niet meer goed functioneren, want die zijn afhankelijk van de AVcc voor het functioneren. Op het functionerende board is de AVcc 4V, wat niet helemaal is wat het moet zijn maar wel voor de meeste 5V dingen wel nog toereikend is. Op het defecte board heb je een opamp op 3,4V zitten, dat is een waarde boven AVcc, en dat gaat wel mis.

Het zal altijd gissen blijven zonder schema, en een fotootje zou kunnen helpen met het troubleshooten, maar ik denk dat je op een goed spoor zit om eerst de stroomvoorziening weer op orde te krijgen.
Zyk schreef op zondag 26 januari 2025 @ 16:44:
Je kunt eerst gewoon uitlezen proberen. Mochten de fuses zodanig ingesteld staan dat dat niet mogelijk is, dan ondersteunen veel AVR’s een “high voltage programming mode” waarmee je de fuses alsnog kunt herprogrammeren.

Het is voor mij een tijdje geleden, alles op eigen risico.
Het is met een AVR programmer inderdaad soms mogelijk om een .HEX bestand (machine code) uit de MCU te lezen, maar let wel: als herprogrammeren is uitgeschakeld door de OEM door bijvoorbeeld de lock-bits aan te zetten of ISP/JTAG uit te schakelen, kan je vaak wel een .HEX bestand eruit halen maar dat is dan willekeurige garbage, en niet bruikbare code.

High-voltage programmeren is te gebruiken om de MCU weer in een programmeerbare staat te brengen, maar volgens mij wordt daarbij wel het oorspronkelijke programma gewist. Dit weet ik niet 100% zeker, maar ik zou HV programming pas toepassen als alle andere wegen niets hebben opgeleverd.

Acties:
  • +1 Henk 'm!

  • Atlantis01
  • Registratie: Augustus 2010
  • Laatst online: 15-07 23:40
Hi Naarden 4ever,

Bedankt voor je reactie.
Op het slechte PCB heb ik de spoel kortgesloten en dan schiet de Vcc omhoog van 4V naar 4.7V
Helaas hielp het niet om de trolley weer werkend te krijgen.
Ik heb ook de stromen gemeten uit de 5V voeding.

Goede PCB = 33mA
Defecte PCB = 45mA

Op het werk had een collega nog een AVR ISP programmer liggen. Ik heb de ISP pins van het goede PCB verbonden met de programmer en met AVRDudess (Windows GUI van Avrdude) de chip uitgelezen.
En een geluk is dat de chip volledig open stond. Alle lock bits stonden op 1 :)
Flash, EEPROM gedownload en de fuse bits uitgelezen.

Afbeeldingslocatie: https://tweakers.net/i/qw86UrNMHCGSWO9bVMDaCWuiNGI=/x800/filters:strip_icc():strip_exif()/f/image/Y9fxgWDGbTV3MkM3ywWOc2nY.jpg?f=fotoalbum_large


Op het defecte PCB werkte dit helaas niet. AVRDudess kon geen verbinding maken (MCU not detected)

Dus mijn volgende stap op het defecte PCB de Atmega168 vervangen, opnieuw flashen en fuse bits programmeren, dan zou de trolley weer moeten werken :)

Acties:
  • +1 Henk 'm!

  • Atlantis01
  • Registratie: Augustus 2010
  • Laatst online: 15-07 23:40
Atmega168 vandaag vervangen en opnieuw geflashed. De trolley draait weer prima :)

Nogmaals dank voor jullie reacties en het meedenken naar een oplossing 👍
Pagina: 1