Homelink supports both fixed and rolling codes, depending on what your garage door wants. When you are "training" it, using the existing opener lets it learn a fixed code. If it can't learn a fixed code, instead you press the training button on the door controller, and it instead learns the car's rolling code. It requires a few consecutive transmissions to do that. Then in future, if the car transmits a code from "the future", it will again require a few consecutive codes to resync. If you press the homelink button while still out of range, you might cause this behavior yourself.