Crumar Organizer T1 / T2 Netzteil

Aufrufe: 77

Beide Geräte, Crumar Organizer T1 und T2, benutzen das gleiche Netzteil. Ein Transformator mit Mittenabgriff produziert Wechselspannung, die in einen Brückengleichrichter geht und dann +/- 22-24 Volt gegen Masse bzw. den Mittenabgriff darstellt. Über Spannungsregulierer (78M15 für positiv, 79M15 für negativ) werden dann die +/- 15V erzeugt, mit denen ein T1 / T2 arbeitet.

Fehlersuche

Alle T1 / T2, die ich bisher in den Händen hatte, hatten mindestens einen Fehler im Netzteil. Dank des übersichtlichen Aufbaus ist eine Fehlersuche recht einfach. In den meisten Fällen brennen die beiden 1A-Sicherungen (6) direkt beim Einschalten durch, daher sind die zuerst zu prüfen. Wenn die Sicherungen durchgebrannt sind, kann man natürlich sein Glück versuchen, die Sicherungen austauschen und hoffen, dass die nur zufällig durchgebrannt sind – ja, so etwas kommt vor, aber das habe ich bei diesen Netzteilen noch nicht gesehen.

Da die Spannungsregler (13) per Design auf 500 mA begrenzt sind (und +300mA / -200mA im Schaltbild gefordert werden), müssten die Sicherungen auch bei kurzfristig erhöhter Last funktionieren. Die Spannungsregler sind in Realität irgendwelche, je nachdem, was Crumar zu dem Zeitpunkt ergattern konnte. Hauptsache +/- 15V.

Wenn die Sicherungen aufgeben kann ich mir hier sicher sein, dass ein echter Kurzschluss vorliegt. Bei all meinen Netzteilen waren die 1µF-Kondensatoren (9/11/14) Tantal-versionen, und bei allen haben diese Kondensatoren aufgegeben was sich meistens als Kurzschluss gezeigt hat. Bei den größeren Elkos (laut Schaltbild beide 2000 µF, in Realität war aber immer der Kondensator in der negativen Spannungsversorgung lediglich ein 1000 µF) war es bisher 50/50 ob die defekt waren. In jedem Fall lohnt es sich, die Tantals mindestens an einem Beinchen auszulöten. Ich habe es bei 2 Netzteilen ausprobiert, dass ich die größeren Kondensatoren austausche, aber die Tantals drin lasse. Beides Mal explodierten die Tantals in der selben Reihenfolge – positiv vor Spannungsregler, negativ vor, positiv nach, negativ nach Spannungsregler.
Ich würde daher im Netzteil einfach sofort alle Kondensatoren tauschen.

Mir ist es noch nicht passiert, dass einer der Spannungsregler defekt wäre. Wären die direkt auf der Platine, würde ich die aber auch direkt austauschen, die Teile kosten nichts. Allerdings sind die Regler mit einer Steckplatine und dünnen Drähtchen verbunden. Ich möchte immer soweit möglich alles so original wie möglich erhalten, daher bleiben die Regler, wo sie sind. Würde ich da etwas anpassen wollen, dann würde ich mir direkt 2 15Volt Netzteile kaufen und die als vollen Austausch vom Originalnetzteil nehmen. Schon alleine, weil moderne Netzteile viel effizienter arbeiten. Das musste ich bei einem T1 machen, da dort der Transformator selber einen Kurzschluss hatte, und ich ehrlich gesagt keine Lust hatte, dann noch einen Ersatztrafo zu finden.

Wenn die Glimmlampe im Schalter nicht leuchtet, ist entweder das Kaltgerätekabel zum Netzteil kaputt, die 250 mA-Sicherung durchgebrannt, der Schalter defekt oder einfach die Glimmlampe hinüber – defekte Glimmlampe hatte ich schon, aber keins der anderen Probleme.

Mechanisches

Um an die Lötseite der Hauptplatine zu kommen, müssen 4 Schrauben gelöst werden. Die beiden näher am Transformator haben Abstandshalter während die beiden anderen Winkel zum Fixieren der Platine haben. Für mich ist die Schraube rechts oben im Bild nicht erreichbar, spätestens beim Einbau habe ich mit meinen Fingern keine Chance mehr.
Aber der Sicherungshalter und der Kühlkörper mit den Spannungsreglern kann abgeschraubt werden. Etwas Vorsicht ist hier geboten, ich reiße regelmäßig die dünnen Drähtchen ab und muss sie dann wieder anlöten.

Wenn alles gut gegangen ist, alle Kondensatoren ausgetauscht und neue Sicherungen eingesetzt sind, sollte das Netzteil am großen Steckverbinder (15) eine direkte Verbindung zu Erde haben, der kleinere daneben (16) eine Spannung von etwa -15V und der dritte (17) etwa +15V haben.

Da das Netzteil nicht immer (alleine) Schuld an Problemen ist, hilft eine kurze Messung bei dem ausgesteckten Stromanschluss (also hinter dem Netzteil). Wenn zwischen Masse und den +/- 15 Volt-Anschlüssen ein Widerstand im Bereich von 20kOhm besteht, kann man die Stromversorgung verbinden und alles könnte wieder funktionieren.

Bei einem T2 habe ich derzeit zwischen +15V und Masse gerade mal 63 Ohm, und das sinkt noch, wenn wirklich Spannung anliegt. Damit habe ich an diesem Gerät dann doch mal den positiven Spannungsregler erledigt.

Korg i3 – power rail repair

Aufrufe: 291

I bought a Korg i3 – broken – from ebay, the seller claimed it just stopped working. If that is true, usually the power rail is to blame. And in most cases it’s a dead capacitor. No big deal – usually.

The first board to come out is KLM-1631:

And a check on the components showed me that something let the magic smoke out – LC1. And it was right at the connector to the power supply:

The power supply looked good, so I assumed this was the culprit.

According to the Service manual, LC1 is a DST310, a component I hadn’t seen before, but I had guessed right, a blown capacitor.

I don’t have these and couldn’t find a source – maybe these aren’t produced anymore? But it’s just a power filter, I could probably get away with just connecting CN8A-5 directly to the “A” point. But having capacitive storage in a power rail is always a good thing. And since I’m already in there, I can do at least a decent job.

So I desoldered this LC1, cleaned the board and had to find the traces were eaten away. I additionally removed C92 as these capacitors were just in parallel. Also, maybe C92 was damaged by some surge – it was in the way and costs next to nothing. Only to find out that the trace going to C92 had left us as well.

So, if in doubt – scream and shout. Uhm… these are buffer capacitors, so they just sit between plus and minus, both traces were large enough to just scratch the solder screen off and solder in capacitors. Again, I could probably have gotten away with just one, but the original schematic had two, so I used two:

Yep, it’s ugly. Yep, I probably should have used a ceramic for the smaller one, but seriously, it is the 5V rail, quite likely this is the supply for the logic and won’t have any effect on the sound.

Starting up, it works:

So, I was right to assume a blasted capacitor in the power rail was to blame.

But, as Dr. House kept reminding us: people lie.

Next up: Repairing Power-On-Mute on an i3.

Salesforce Mailchimp integration update 1.93.2

Aufrufe: 988

Unfortunately Mailchimp created a little hickup in the update 1.93.2 (2020-08-11) to their Salesforce integration. When you open the setup “MC Setup” you might be greeted with an error message:

“Read” permission to field “MC4SF__Prompt_For_Full_Sync__c on object “MC4SF__MC_List__c” is not allowed for the current user.

I had seen this on my Developer Edition org at first and contacted the Mailchimp support. Sadly it doesn’t seem to ring enough alarm bells, the final answer was “Since the error has a quick fix and it’s not causing an issue in all accounts, we will be keeping an eye out for further instances to see if there are any similarities.” It seems a bit strange to me, as this is breaking existing installations when the update is applied.

However, there is a solution. In the field level security settings of the field “Prompt For Full Sync” on “MC Audience” you have to give read access to this field for all profiles that will use the Mailchimp integration.

In “Setup” navigate to “Object Manager”

Then select “MC Audience”

And in Fields & Relationships select “Prompt For Full Sync”

Then go to the field level security and grant at least read permissions to all profiles that use the Mailchimp integration

It seems that “read” is all that is required, but I don’t know that for a fact.

I’m just astonished that this newly introduced field seems to be a necessity, yet the managed package does not provide any permissions for this field. Additionally I would have expected Mailchimp to quickly remedy this issue. Luckily for ConcisCons customers, I had seen that problem before they experienced problems with that.

Additionally, it seems that these missing permissions in a managed package is not a first for Mailchimp: the MC Setup page is returning an error

Salesforce Lightning Component – Strange Input Behaviour

Aufrufe: 288

I was a bit astonished by one reaction of a lightning:input field: whatever I typed in there, nothing appeared in the field. It wasn’t any event handler that I added, but a mistake on my side.

The component was very simple:

<aura:component access="global" controller="MyController">
<lightning:input value="{!v.filterText}"
label="Filter"
name="myFilter"
placeholder="Filter here...!" /> </aura:component>

The issue was, that the aura:attribute with the name “filterText” was not defined.

Okay, sure, that’s a mistake, but: really? No reaction at all? Not even an error message, only pure silence.

Roland XP-80 – dead with lights on

Aufrufe: 560

So I have a Roland XP-80 with a similar issue as this guy who shows us on Youtube how to replace the battery in the thing. The LCD backlight is on as is the LED on the disk drive. Apart from that – no sign of life.

For me it was an easy fix, as it was quite obvious what had happened:

Capacitor 201 (47µF, 6V) had blown up quite spectacularly. To remedy that, I soldered in one that I had lying around (not exactly the same type, mine has a rating of 25 Volt), and after that all was well.

The stain on the board was quite substantial, so I had to carefully scratch the sod away to try and see if the traces were still in good condition (it always helps if you have access to a service manual / service notes, you can find some at synfo.nl). And yes, all was still connected according to my multi meter.

This would have been a job for a few minutes if I had done that in a sensible manner – but no, I had to start too far down the path.

Remember the simplest steps to find an issue with electronics (I think Louis Rossmann and Dave Jones deserve a bit of credit here):

  • Sniff the board – really, that was a dead give-away here. It stank of exploded component. I just ignored it.
  • Visual inspection – if it doesn’t smell funny, you should still look for the sh*t stain on the board. As you can see above, another dead give-away. I just ignored it.
  • Thou shall check voltages – And this is where I started at. At the power supply. Which was basically fine.

Now, after these steps you can start using your brain, try to check clocks – which was what I was going to do next, but luckily the chip I wanted to probe was close to the exploded capacitor. You can follow signals, measure in circuit, desolder components to measure outside of the circuit and what not.

But only after the sniff test and the visual inspection! Took me the better part of three hours because I didn’t.

Salesforce: rendering of Visual Force pages and context

Aufrufe: 254

In a simple, straightforward programming situation, you would assume that functions are executed when they are seemingly called. When you are rendering a Visual Force page in Salesforce, things seem to be a bit mixed up. Though it seems counter-intuitive, it is understandable what happens.

Let’s take a simple example of a Visual Force page with a controller.

Page (atest):

<apex:page controller="Atest">
    Parameter: {!parameter} <br />
    Parameter2: {!parameter2} <br />
    Parameter: {!parameter} <br />
    Parameter2: {!parameter2} <br />
    Parameter: {!parameter} <br />
    Parameter2: {!parameter2} <br>
</apex:page>

Controller:

public class Atest {
    private Integer parameter;

    public Atest () {
        System.debug ('Constructor called.');
        parameter = 1;
    }

    public Integer getParameter () {
        System.debug ('getParameter');
        parameter = parameter + 1;
        return parameter;
    }

    public Integer getParameter2 () {
        System.debug ('getParameter2');
        parameter = parameter + 1;
        return parameter;
    }

    public PageReference nextPage () {
        PageReference page1 = new PageReference('/apex/atest2');
        Blob b = page1.getContentAsPDF();
        PageReference page2 = new PageReference('/apex/atest2');  
        b = page2.getContentAsPDF();
        PageReference page3 = new PageReference('/apex/atest2');  
        return page3;
    }
}

{!parameter} is a reference to the method getParameter () and {!parameter2} a reference to getParameter2 (). Ignore the method nextPage () for now…

So what you might expect is that the Visual Force renderer calls getParameter (). This increases the variable parameter by 1 and returns its new value. We do see the output “Parameter: 2” – as expected. Then the renderer calls getParameter2 (). This again increases the variable parameter by 1 and returns its new value. We do see the output “Parameter2: 3” – as expected.

Next, we want “parameter” again – seemingly a call to the method getParameter (). But now the method is not actually executed; parameter is not increased anymore. We get the outputs “Parameter: 2” and “Parameter2: 3” again and again, no matter how many times we think the method is called.

Now for the second part in the controller above, we need the VF page atest2, which is virtually the same, except that it is a different file. Also, for convenience to call the method in our class, add

<apex:form>
    <apex:commandButton action="{!nextPage}" value="next page" />
</apex:form>

to the page atest. When you now click on “next page”, the page atest2 is created 3 times. To make sure that it is actually rendered, we get the content of the page as a pdf, and the third time, the page is returned as a PageReference. Therefore you are transported to the page atest2.

What you now see is “Parameter: 4” and “Parameter2: 5”. Even though we have rendered the page atest2 3 times, the variable parameter has only been increased by 1 two times.

This is because the renderer works in the same context for all 3 times it renders atest2. getParameter () and getParameter2 () are both called exactly once, and that only, because we are rendering a page in a new context – the call to the method nextPage (). You could even create the pages atest3 and atest4, have them rendered after each other (in one method), and “Parameter” and “Parameter2” will be the same value for each rendered page.

Any output of a method is directly cached, and the method is not called again, except for if you force a rerender – because that is what re-rendering is for. If you know that values will change, you have to instruct Visual Force to do a new rendering.

To get around this, make sure that you create a new context for a new page with changing information. The easiest way to do so is IMHO to create a controller instance for every page that needs to be rendered, and this in turn can be done by having a different controller for the subsequent pages.

tl;dr:

Do not change the information of a variable or method during one rendering context. Have all information be calculated before anything is actually rendered, and do not change information when using a get-method. If information changes due to user input, have the sections that show information based on the input rerendered when necessary.

Overall: within one context the VF renderer will always call any getter only once.

Salesforce – Vergleich von 2 orgs

Aufrufe: 247

Das ist mal ein gutes Tool, da bin ich gerade drauf gestoßen: Salesforce Org Compare. Damit kann man die Metadaten von 2 Orgs herunter laden lassen, und die Differenzen (einfach ein Diff auf den heruntergeladenen Daten) anzeigen lassen. Das ist wunderbar, wenn man mal wieder vergessen hat, welche Teile alle für ein Deployment notwendig sind, oder wenn die Orgs unterschiedlich reagieren, und man keinen Anhaltspunkt hat, warum das so ist.

Es sollte eigentlich nicht notwendig sein, schließlich weiß man genau, was man geändert hat, der Kollege hat auch nicht auf einer anderen Sandbox widersprüchliche Sachen geändert…

Thermische Probleme mit Raspberry Pi 4

Aufrufe: 317

Der Raspberry Pi 4 sieht mit seinem Gigabit-Ethernet und den USB-3 Ports genau danach aus, was mir die ganze Zeit fehlte. Einer meine 3er-Pis spielt seit geraumer Zeit mit 3 externen Festplatten NAS. Das natürlich nur unbefriedigend, da mit USB 2 und 100 MBit bei dmcypt-verschlüsselten Platten in guten Fällen 6 MB/s per Samba übertragen werden. Das reicht für vieles, aber längst nicht alles, was ein NAS so tun soll.

Der Pi4 kopiert von dmcrypt zu dmcrypt mit etwa 70 MB/s (über Samba kommt bei mir dann etwa 50 MB/s an – bei großen Dateien), das ist die richtige Richtung. Allerdings lief er beim Kopieren von 2 TB nicht durch, sondern stürzte mit einer Kernel Panic ab. Wenn der als NAS funktionieren soll, muss er auch stabil sein, schnell alleine reicht nicht.

Mit fiel schon beim ersten Starten auf, dass vor allem die USB-Anschlüsse sehr warm werden, die CPU war auch fast nicht mehr anfassbar. Spätestens in einem Gehäuse kann die Wärmeableitung nicht mehr reichen. Bei Tom’s Hardware wird berichtet, dass eine neue Firmware den USB-Controller kühler laufen lassen soll, Tests zeigten 2°C Unterschied, was aber bei weitem noch nicht für den Betrieb in einem Gehäuse ausreicht. Meine Messungen (billigstes Infrarot-Thermometer) des CPU- und RAM-Chips zeigten Oberflächentemperaturen bis 62°C, wenn auf dem Bildschirm das Thermometer erscheint, und auch Thermal Throttling hinweist.

Mit

vcgencmd measure_temp

kann der CPU-Sensor ausgelesen werden. Bei 80°C auf dem Sensor zeigt sich das Thermometer. Meine Versuche bestätigen, dass bei Last nach etwas mehr als 3 Minuten der Prozessor bremst – kopiert der Pi verschlüsselte Dateien, haben alle Chips gut zu tun.

Mit aktiver Kühlung durch einen Lüfter (120mm auf 5 V statt 12 V, so nicht hörbar, und so aufgestellt, dass etwas Luft über die Chips zieht) bleibt der Sensor zwischen 50°C und 60°C, die Oberfläche liegt dann bei akzeptablen 36°C. Im Moment habe ich keine weiteren Abstürze, vielleicht ist die Temperatur das einzige Problem. Auf jeden Fall lasse ich den nur dann als NAS laufen, wenn ich einen Lüfter dran stellen kann, andernfalls ist mir das eine zu heiße Sache.

Salesforce – Assets with or without Contact and/or Account

Aufrufe: 1068

In test classes it is always a good thing if you are not just going through your code, but also to actually test if it is working according to design. To make your test shine, you would test both kinds of cases, working examples as well as those where you expect an error to occur.

To test a trigger, that ensures Contact and Account to be set on an Asset (as long as certain parameters are fulfilled), I added a test case where the trigger could not work properly.

According to the Apex documentation, an Asset must have Contact and/or Account set, otherwise you will run into an Exception (FIELD_INTEGRITY_EXCEPTION: Every asset needs an account, a contact or both).

Screenshot of Asset Object Reference - AccountId must be set

So, my Test class includes

Asset a = new Asset (Name = 'Test asset');
try {
    insert a;
    System.assert (false, 'Should not reach this, an Asset needs an Account or Contact');
}
catch (Exception e) {
}

However, in the project I work at currrently, this assertion fails, as our Assets can exist without neither Contact nor Account.

And this is where the documentation is plainly wrong, as it depends on the Organization-Wide Defaults for sharing. If you set access to anything except the default (Controlled by Parent), you can create Assets without Account or Contact. So the documentation is wrong 75% of the time, as a setting of “Private”, “Public Read Only” and “Public Read/Write” allows Assets without.

This was a pitfall for me, as my test class worked on one box, but not on another. And soometimes failing tests hint at an issue with the org itself. But only sometimes, most times it is because a developer did not set up the test correctly.