ADC not starting 328p

Go To Last Post
38 posts / 0 new
Author
Message
#1
  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Hi, I've only started learning AVR. I am trying to set up an ADC that reads in a value from a potentiometer, however the ADSC bit in the ADCSRA will not set despite my code and thus my conversion will not start.

 

I am using an ATMEGA328P (Arduino UNO) running with AtmelStudio 7 (assembly). The potentiometer input is the 5V pin and the output is analog pin A0 and of course GRND. I have checked the Data sheet and set the relevant bits accordingly however the ADSC bit does not get set.

 

Could anyone please assist? much appreciated

 

 

CONVERSION:                ;R16 USED AS TEMP REGISTER
LDI R16, 0b0000_0011
STS DIDR1, R16
LDI R16, 0b0000_0001
STS DIDR0, R16
LDI R19, 0b0000_0000
STS ADCSRB, R16
LDI R16, 0b1110_1111      ;ADEN ADSC ADATE ADIF_ADIE ADPS2 ADPS1 ADPS0
STS ADCSRA, R16
LDI R16, 0b0110_0000      ;REFS1 REFS0 ADLAR - _ MUX3 MUX2 MUX1 MUX0
STS ADMUX, R16
SEI

BUSY:                    ;POLL FOR ADIF BIT
LDS R19, ADCSRA
SBRS R19, 6              ;CHECK IF ADIF BIT IN ADCSRA IS SET (IF BIT SET THEN CONVERSION COMPLETE)
RJMP BUSY                ;IF CONVERSION NOT COMPLETE RUN LOOP AND CHECK AGAIN

LDS R18, ADCH             ;TEST IF ADCH HIGH OR LOW BY TOGGLING POT
OUT DDRB, R18
OUT PORTB, R18
RJMP CONVERSION           ;REPEAT LOOP FOR CONTINUOUS CONVERSION

 

This topic has a solution.
Last Edited: Sun. Apr 19, 2020 - 10:31 PM
  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

R19 on the 6th line is probably a mistake for R16.
By the way, are there any build errors?

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

I somehow missed the R19 error, thank you, there are no build errors

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Deleted my incorrect comment - sorry

Last Edited: Sun. Apr 19, 2020 - 01:09 AM
This reply has been marked as the solution. 
  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Why are you enabling interrupts by setting the ADIE bit? This will cause the code to crash as you have not shown an ISR to service that event.

You've also set the ADSC bit (started the ADC) before you've set ADMUX. This will give you the wrong result.

 

This comment is not true:

SBRS R19, 6              ;CHECK IF ADIF BIT IN ADCSRA IS SET (IF BIT SET THEN CONVERSION COMPLETE)

bit 6 is the ADSC bit, not the ADIF bit. Apart from the comment, ADSC is the bit you want.

 

The sequence:

 

Enable the ADC, set the prescale, mode etc.

set ADMUX values

set ADSC

poll ADSC for completion

read result

 

 

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

I somehow missed the R19 error, thank you, there are no build errors

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Thank you for your response! I have made adjustments as per code and I am now getting an ADCH value! (this is with the R19 error I made on line 6 which I commented out for now)

 

However as I understand it the ADCH value should be greater than 0 when the potentiometer is turned on and thus the LED (PORTB) should be lit up, but as i turn the potentiometer to different positions the LED switches off at some positions and switches on at other positions and I do not understand why? The LED should only be switches off when the potentiometer is turned down completely. 

 

Here is the adjusted code

 

CONVERSION:                ;R16 USED AS TEMP REGISTER
LDI R16, 0b0000_0011
STS DIDR1, R16
LDI R16, 0b0000_0001
STS DIDR0, R16
;LDI R16, 0b0000_0000
STS ADCSRB, R16
LDI R16, 0b1010_0111      ;ADEN ADSC ADATE ADIF_ADIE ADPS2 ADPS1 ADPS0
STS ADCSRA, R16 
LDI R16, 0b0110_0000      ;REFS1 REFS0 ADLAR - _ MUX3 MUX2 MUX1 MUX0
STS ADMUX, R16
LDI R16, 0b1110_0111
STS ADCSRA, R16
SEI

BUSY:                    ;POLL FOR ADSC BIT
LDS R19, ADCSRA
SBRC R19, 6              ;CHECK IF ADSC BIT IN ADCSRA IS CLEARED (IF BIT CLEAR THEN CONVERSION COMPLETE)
RJMP BUSY                ;IF CONVERSION NOT COMPLETE RUN LOOP AND CHECK AGAIN
                    
LDS R18, ADCH             ;TEST IF ADCH HIGH OR LOW BY TOGGLING POT
OUT DDRB, R18
OUT PORTB, R18
RJMP CONVERSION           ;REPEAT LOOP FOR CONTINUOUS CONVERSION

 

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

I have not decoded all of your magic numbers for the ADC setup, but since ADCH represents the most significant two bits of the conversion value, it would normally start at 0x00, then proceed through 0x01, 0x02 to 0x03 as the POT is increased.

Could this be the source of the changes you observe in the  LED?

 

Edit: You are also switching the DDR for PORTB bits 0 and 1 between input and output as ADCH changes...

Edit2: OK, I have relooked at the code and see that ADLAR =1 so ADCH is the MS 8-bits of code.

What bit of PORTB is the LED on?

David

Last Edited: Sun. Apr 19, 2020 - 02:03 PM
  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

frog_jr wrote:

 

Edit: You are also switching the DDR for PORTB bits 0 and 1 between input and output as ADCH changes...

 

 

I have removed the configuration of the different registers from the loop and now the CONVERSION loop only contains code to set the ADSC to begin the conversion, however problem still persists and LED goes on and off at different postions as i turn the pot

Last Edited: Sun. Apr 19, 2020 - 02:07 PM
  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

TinyRick wrote:

Here is the adjusted code

CONVERSION:                ;R16 USED AS TEMP REGISTER
LDI R16, 0b0000_0011
STS DIDR1, R16
LDI R16, 0b0000_0001
STS DIDR0, R16
;LDI R16, 0b0000_0000
STS ADCSRB, R16

Why did you comment out the LDI?  Now you're writing the previous value of R16 into ADCSRB.  Is that what you intended?  Because that would cause the ADC to trigger on the analog comparator if you set ADATE in ADCSRA, which you do.  Which, by the way, why?  You've not configured the AC, nor have you mentioned it (although you have disabled the input buffers for the AC's input pins via DIDR1... why?).  Further, you start the conversion yourself anyway with ADSC, so why enable auto-triggering?

 

Might also be easier to RMW ADCSRA, rather than explicitly writing it to set ADSC.

 

And what is the SEI accomplishing?  You've enabled not interrupts, and provided no interrupt code.

 

frog_jr wrote:

What bit of PORTB is the LED on?

Indeed.  The OP hasn't said.  As such, the entire 8 bits of the ADC result are written to both DDRB and PORTB, so all bits which are '1' in the result will drive an output high, and those that are '0' will float a pin.

 

TinyRick wrote:
but as i turn the potentiometer to different positions the LED switches off at some positions and switches on at other positions and I do not understand why
The answer to that will lie in your answer to the question of what pin you've got the LED connected to.

 

Below fixes a number of issues, but not that of how the LED is handled w.r.t. the ADC result:

CONVERSION:
	;R16 USED AS TEMP REGISTER
	LDI	R16, (1 << ADC0D)
	STS	DIDR0, R16
	LDI	R16, 0
	STS	ADCSRB, R16
	LDI	R16, (1 << ADEN) | (7 << ADPS0)
	STS	ADCSRA, R16
	LDI	R16, (1 << REFS0) | (1 << ADLAR)
	STS	ADMUX, R16
	LDS	R16, ADCSRA
	ORI	R16, (1 << ADSC)
	STS	ADCSRA, R16

BUSY:
	;POLL FOR ADSC BIT
	LDS	R19, ADCSRA
	SBRC	R19, ADSC
	RJMP	BUSY

	LDS	R18, ADCH
	OUT	DDRB, R18
	OUT	PORTB, R18
	RJMP	CONVERSION

EDIT:  code typo

"Experience is what enables you to recognise a mistake the second time you make it."

"Good judgement comes from experience.  Experience comes from bad judgement."

"Wisdom is always wont to arrive late, and to be a little approximate on first possession."

"When you hear hoofbeats, think horses, not unicorns."

"Fast.  Cheap.  Good.  Pick two."

"We see a lot of arses on handlebars around here." - [J Ekdahl]

 

Last Edited: Sun. Apr 19, 2020 - 11:38 PM
  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

The fixed code in #10 above should work, but I see three issues. 

- Uncomment the line that puts value 0 into R18 and then into ADCSRB.  Or, write nothing to ADCSRB because 0 is its default value.

-  The system-clock_to_ADC clock divisor should be 7<<ADPS0 instead of 3<<ADPS0 in order to select DIVIDEby 128.

-  The Data Direction Register for Port B should be set to all OUTPUT before CONVERSION get entered.   SER DDRB.

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Simonetta wrote:

-  The system-clock_to_ADC clock divisor should be 7<<ADPS0 instead of 3<<ADPS0 in order to select DIVIDEby 128.

Whoops.  Good catch.  Fixed in the post.

Simonetta wrote:

-  The Data Direction Register for Port B should be set to all OUTPUT before CONVERSION get entered.   SER DDRB.

We're waiting for an answer from the OP on which pin the LED is on.  The lecture on how to do that right will come later ;-)

 

Simonetta wrote:

The fixed code in #10 above should work, but I see three issues. 

- Uncomment the line that puts value 0 into R18 and then into ADCSRB.  Or, write nothing to ADCSRB because 0 is its default value.

 It's only commented in the OP's code in #7, not in my suggested code in #10

"Experience is what enables you to recognise a mistake the second time you make it."

"Good judgement comes from experience.  Experience comes from bad judgement."

"Wisdom is always wont to arrive late, and to be a little approximate on first possession."

"When you hear hoofbeats, think horses, not unicorns."

"Fast.  Cheap.  Good.  Pick two."

"We see a lot of arses on handlebars around here." - [J Ekdahl]

 

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Firstly, thank you for your response and assistance.  

Why did you comment out the LDI?  Now you're writing the previous value of R16 into ADCSRB.  Is that what you intended? 

 

I accidentally had the LDI commented out when I flashed to my arduino and thats when the circuit appeared to be working which is why i left it like that. i do undertand by commenting it out the previous vale of R16 gets loaded to ADCSRB.

And what is the SEI accomplishing?  You've enabled not interrupts, and provided no interrupt code.

 

The SEI was was a mistake i forgot to clear from a previous version of the code my bad.

 

The answer to that will lie in your answer to the question of what pin you've got the LED connected to.

I have the LED connected to pin 13

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

You might want to take a trip to avrbeginners.net and study the ADC section and the worked example.

http://avrbeginners.net/architec...

 

You can put lipstick on a pig, but it is still a pig.

I've never met a pig I didn't like, as long as you have some salt and pepper.

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0


TinyRick wrote:

I have the LED connected to pin 13

I think you mean Arduino Uno pin 13, not ATMega328p pin 13.

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

yes, apologies, i have the LED connected to Ardunio pin 13 which is the ATMega328p PB5

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

TinyRick wrote:
I have the LED connected to pin 13
So for the M328P in the 32-pin quad package, that would be PB1, (or are you talking about the 28-pin DIP which would be PD7?)

Assuming PB1, it would seem my question in #8 ( "Could this be the source of the changes you observe in the  LED?" ) is why the LED blinks as you change the POT.

 

Edit: My assumptions were wrong, but the question in #8 is still valid... Where in your code are you changing PD7?

David

Last Edited: Mon. Apr 20, 2020 - 01:10 PM
  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

I'm sorry i don't fully understand your question? I'm not using PD7 at all, I'm using PB5 to output to the LED to see if the ADCH value is high or low.

 

My goal is to set up the ADC for another task, i'm just using the LED as an interim test for now, but the fact that the LED goes on and off  as i turn the pot in different positions tells me that my ADCH value is changing. the ADCH value should change as i turn the pot but it should not read as zero unless the pot is completely turned down.

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

TinyRick wrote:

i'm just using the LED as an interim test for now, but the fact that the LED goes on and off  as i turn the pot in different positions tells me that my ADCH value is changing. the ADCH value should change as i turn the pot but it should not read as zero unless the pot is completely turned down.

Assuming you want to turn the LED on when ADCH is non zero, and turn the LED off when ADCH is zero, you need to do something like this:

Enable PB5 for output, you should only need to do this once during initialisation:

sbi        DDRB,5                ; Set up PB5 for output

Then in your loop after reading the ADC
Check if ADCH is zero, if so
cbi        PORTB,5               ; Set PB5 output low

Otherwise (ADCH is not zero)

sbi        PORTB,5               ; Set PB5 output high
BTW: I'm a relative newbie to AVR asm too, hence I can't just write out the exact instructions for checking / branching without spending more time on it than I can spare right now. I'm just having a coffee break from some DIY.

 

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 1

 

TinyRick wrote:

Hi, I've only started learning AVR <snip> I am using an ATMEGA328P (Arduino UNO) running with AtmelStudio 7 (assembly).

I also decided to learn AVR asm with Atmel Studio. I splashed out on an Atmel-ICE, but they are rather expensive, about £80 in the UK.
Have you considered getting one of these?:

My understanding is that using the above you could use the debug facilties of Atmel Studio. That would allow you to single step your asm code one instruction at a time and see the register values and I/O port values.

The above price is from Radiospares. They do free delivery with no min spend.

 

Last Edited: Mon. Apr 20, 2020 - 02:22 PM
  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Dave Lowther wrote:
My understanding is that using the above you could use the debug facilties of Atmel Studio.

Your understanding is correct.

 

EDIT - See:  https://www.avrfreaks.net/forum/xplained-mini-mega328pb

 

Radiospares

Showing your age there, Dave!

 

laughcheeky

Top Tips:

  1. How to properly post source code - see: https://www.avrfreaks.net/comment... - also how to properly include images/pictures
  2. "Garbage" characters on a serial terminal are (almost?) invariably due to wrong baud rate - see: https://learn.sparkfun.com/tutorials/serial-communication
  3. Wrong baud rate is usually due to not running at the speed you thought; check by blinking a LED to see if you get the speed you expected
  4. Difference between a crystal, and a crystal oscillatorhttps://www.avrfreaks.net/comment...
  5. When your question is resolved, mark the solution: https://www.avrfreaks.net/comment...
  6. Beginner's "Getting Started" tips: https://www.avrfreaks.net/comment...
Last Edited: Mon. Apr 20, 2020 - 02:56 PM
  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

I really appreciate the advice and suggestion however i'm learning AVR as part of a Micro-processing course which i am enrolled for and using the ATMega328p is a requirement.

 

i find that debugging general works fine and i am able to view the status of various registers 

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

TinyRick wrote:

I really appreciate the advice and suggestion however i'm learning AVR as part of a Micro-processing course which i am enrolled for and using the ATMega328p is a requirement.

The board I mentioned is an ATMega328p. I was only suggesting you use it to get the code working, then you could put the working code on the Uno, however ...

 

TinyRick wrote:

i find that debugging general works fine and i am able to view the status of various registers 

Sorry, I assumed you were just using a programmer, how are you connecting to the Arduino Uno to enable debugging in Atmel Studio?

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

TinyRick wrote:
using the ATMega328p is a requirement

But the board Dave mentioned is an ATMega328p

Top Tips:

  1. How to properly post source code - see: https://www.avrfreaks.net/comment... - also how to properly include images/pictures
  2. "Garbage" characters on a serial terminal are (almost?) invariably due to wrong baud rate - see: https://learn.sparkfun.com/tutorials/serial-communication
  3. Wrong baud rate is usually due to not running at the speed you thought; check by blinking a LED to see if you get the speed you expected
  4. Difference between a crystal, and a crystal oscillatorhttps://www.avrfreaks.net/comment...
  5. When your question is resolved, mark the solution: https://www.avrfreaks.net/comment...
  6. Beginner's "Getting Started" tips: https://www.avrfreaks.net/comment...
  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

TinyRick wrote:
PB5
Well that explains your behaviour.

 

Since you have:

	LDI	R16, (1 << REFS0) | (1 << ADLAR)
	STS	ADMUX, R16

... and since you have:

	LDS	R18, ADCH
	OUT	DDRB, R18
	OUT	PORTB, R18

Then the value in R18 will range from 0b00000000 to 0b11111111.  Bit 5 is highlighted there.  While moving through that range, bit 5 will toggle from '0 to '1' and back to '0' three times, before finally ending up as '1':

0b00000000
0b00000001
.
.
.
0b00011111
0b00100000
0b00100001
.
.
.
0b00100000
0b01000000
0b01000001
.
.
.
0b01011111
0b01100000
0b01100001
.
.
.
0b01111111
0b10000000
0b10000001
.
.
.
0b10011111
0b10100000
0b10100001
.
.
.
0b10100000
0b11000000
0b11000001
.
.
.
0b11011111
0b11100000
0b11100001
.
.
.
0b11111110
0b11111111

 

But your LED is on PB5, which is bit 5 of the port.  By copying ADCH into PORTB like you are, you'll see the same behaviour on the LED as you see on bit 5 above, as you move the pot from one end to the other.

 

Others have suggested similar notions w.r.t. DDRB and SBI, but I'd suggest you use the mid-point of the ADC's range as a threshold for the LED.  Something like:

.EQU	LED_BIT = 5
.EQU	THRESHOLD = 0x80

INIT:
	SBI	DDRB, LED_BIT

CONVERSION:
	;R16 USED AS TEMP REGISTER
	LDI	R16, (1 << ADC0D)
	STS	DIDR0, R16
	LDI	R16, 0
	STS	ADCSRB, R16
	LDI	R16, (1 << ADEN) | (7 << ADPS0)
	STS	ADCSRA, R16
	LDI	R16, (1 << REFS0) | (1 << ADLAR)
	STS	ADMUX, R16
	LDS	R16, ADCSRA
	ORI	R16, (1 << ADSC)
	STS	ADCSRA, R16

BUSY:
	;POLL FOR ADSC BIT
	LDS	R19, ADCSRA
	SBRC	R19, ADSC
	RJMP	BUSY

	LDS	R18, ADCH
	CPI	R18, THRESHOLD
	BRCC	LED_ON
	CBI	PORTB, LED_BIT
	RJMP	CONVERSION
LED_ON:
	SBI	PORTB, LED_BIT
	RJMP	CONVERSION

Untested.

 

"Experience is what enables you to recognise a mistake the second time you make it."

"Good judgement comes from experience.  Experience comes from bad judgement."

"Wisdom is always wont to arrive late, and to be a little approximate on first possession."

"When you hear hoofbeats, think horses, not unicorns."

"Fast.  Cheap.  Good.  Pick two."

"We see a lot of arses on handlebars around here." - [J Ekdahl]

 

Last Edited: Mon. Apr 20, 2020 - 03:10 PM
  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

With the threshold set at 128 as per your code, the LED remains off and only switches on when the pot is turned halfway (about 180 degrees from the starting position) and then remains on as i turn it further.  This seemed to be an improvement as the LED only turned on and off once and did not constantly change.  I played around with different Threshold values which were factors of 128 and found that by setting the Threshold to 16, the LED would switch on by turning the pot not far from starting position and the LED would remain on as i turned the pot further. 

 

This basically "resolved" my LED issue, but my plan is to use the ADC to create a timer where the ADCH represents a value in seconds.

  Then the value in R18 will range from 0b00000000 to 0b11111111.  Bit 5 is highlighted there.  While moving through that range, bit 5 will toggle from '0 to '1' and back to '0' three times, before finally ending up as '1'

I am still a bit unsure about this and why it occurs but does this mean by ADCH value (R18) is still constantly changing in the loop? This would be a problem if i need to use the ADCH value as a value of time .

 

Thank you again for the assistance

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

In a "perfect" system ADCH will only change when the POT is changed.

In a "real" system, there may be some jitter in the ADC reading (depending on how the signal from the POT is filtered).

 

The value in ADCH will be updated on every cycle through the loop. I's value will definitely change as the POT is moved.

The ADC is converting the voltage on the ADC pin to a 10-bit digital value, the upper 8 bits are in ADCH.

 

The value of ADCH will (theoretically) vary from 0x00 through all binary values to 0xFF (It actually may never obtain values at the extremes,  0x00 or 0xFF).

The values obtained will depend upon how the POT is connected in the system and the type of POT (linear vs log).

 

As the POT is increased from 0V to 5V (or whatever the max voltage), the ADCH value will increment (0, 1, 2, 3, 4 ... 253, 254, 255).

The 3 MSBs of ADCH will count 0b000, 0b001, 0b010, 0b011, 0b100, 0b101, 0b110, 0b111, dividing the full range into 8 regions (bit 5 highlighted)

(Corresponding to the decimal values in ADCH of 0-31, 32-63, 64-95, 96-127, 128-159, 160-191, 192-223 and 224-255)

 

As the voltage from the POT increases, bit-5 will toggle as shown.

David

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 1

awneil wrote:

Showing your age there, Dave!

The Beatles kindly wrote me a song for this year. I also still eat Marathons and Opal Fruits and I clean the sink with JIF :-)

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Dave Lowther wrote:
The Beatles kindly wrote me a song for this year. I also still eat Marathons and Opal Fruits and I clean the sink with JIF :-)

 

Cleaning the sink with peanut butter?  Ohhkay.  Granted, I've never tried it, but somehow I don't think it would go well...  wink  Those wacky Britlanders...  S.

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Scroungre wrote:
Cleaning the sink with peanut butter?  Ohhkay.
I'm guessing you probably just snicker when we have marathons too ;-)

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

I don't think I'd run 26 miles for a Klondike bar, either...  At least, not all at once.  cheeky  S.

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0


Just to clarify (although it seems Marathon and Opal Fruits may be changing back - according to a reliable on-line source - the Daily Mail cheeky)

 

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Jif looks a lot like Vim:

 

https://en.wikipedia.org/wiki/Cif

In Canada and India, it is still called Vim

Also:

http://www.strategic-leaps.com/?p=973

 

I've got two bottles of it under the sink :-)

 

I also prefer vim here:

https://www.vim.org/

 

I keep a bottle of that under every keyboard ;-)

 

"Experience is what enables you to recognise a mistake the second time you make it."

"Good judgement comes from experience.  Experience comes from bad judgement."

"Wisdom is always wont to arrive late, and to be a little approximate on first possession."

"When you hear hoofbeats, think horses, not unicorns."

"Fast.  Cheap.  Good.  Pick two."

"We see a lot of arses on handlebars around here." - [J Ekdahl]

 

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

https://en.wikipedia.org/wiki/List_of_renamed_products

 

It's a sad old business when the Jif, Marathon, Opal Fruits. Oil of Ulay, etc that you grew up with suddenly becomes a new thing just to reduce international packaging/marketing costs !

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0


joeymorin wrote:
Jif looks a lot like Vim

The Vim I remember was a powder - not a cream.

 

 

Seems it is still available (in updated packaging):

 

https://www.amazon.co.uk/Vim-Classic-Scourer-500g/dp/B001CJ117Y

Top Tips:

  1. How to properly post source code - see: https://www.avrfreaks.net/comment... - also how to properly include images/pictures
  2. "Garbage" characters on a serial terminal are (almost?) invariably due to wrong baud rate - see: https://learn.sparkfun.com/tutorials/serial-communication
  3. Wrong baud rate is usually due to not running at the speed you thought; check by blinking a LED to see if you get the speed you expected
  4. Difference between a crystal, and a crystal oscillatorhttps://www.avrfreaks.net/comment...
  5. When your question is resolved, mark the solution: https://www.avrfreaks.net/comment...
  6. Beginner's "Getting Started" tips: https://www.avrfreaks.net/comment...
  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0


awneil wrote:

Seems it is still available (in updated packaging):

Except:

 

 

;-)

"Experience is what enables you to recognise a mistake the second time you make it."

"Good judgement comes from experience.  Experience comes from bad judgement."

"Wisdom is always wont to arrive late, and to be a little approximate on first possession."

"When you hear hoofbeats, think horses, not unicorns."

"Fast.  Cheap.  Good.  Pick two."

"We see a lot of arses on handlebars around here." - [J Ekdahl]

 

Last Edited: Tue. Apr 21, 2020 - 03:36 PM
  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

So there's been a run on Vim too, not just TP!

 

 

 

(Possum Lodge oath) Quando omni flunkus, moritati.

"I thought growing old would take longer"

 

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Jif looks a lot like this:

 

Peanut Butter

 

Maybe next time I'll scale the image a little.  S.